当前位置: 首页 > 知识库问答 >
问题:

Android Java日历替代方案,具有以下功能

岑俊明
2023-03-14

我需要从周一开始我的日历。根据今天的日期(2012年8月7日),第一天是周一,一周中的最短天数是1天,java为我提供了一年中的第33周,而android为32,为什么?

因此,我需要具有以下功能的日历替代方案。我正在使用的代码:

Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.setMinimalDaysInFirstWeek(1);

out("For date : "+df.format(cal.getTime())+" Week = "+cal.get(Calendar.WEEK_OF_YEAR));

有什么帮助吗?

共有1个答案

法子昂
2023-03-14
LocalDate.of( 2012 , Month.AUGUST , 7 )
         .get( IsoFields.WEEK_OF_WEEK_BASED_YEAR ) 

32

不确定你的问题的直接答案,但可能是不同的Locale值在起作用。在日历中一周的定义因地区而异。

但这是毫无意义的。你应该使用java。取代日历类的时间类。

Calendar是旧日期时间类的一部分,这些类现在是遗留的,被java取代。时间课。对于早期的Android,请参见下面的最后几点。

你必须定义你所说的周数。定义周数和周数有不同的方法。

默认情况下,java。时间类使用标准ISO 8601定义:周#1为日历年的第一个星期四,从周一开始(如您所要求)。所以一年有52或53周。日历年的前几天和最后几天可能会在前一周/后一周到达。

LocalDate类表示一个只包含日期的值,不包含一天中的时间和时区。

LocalDate ld = LocalDate.of( 2012 , Month.AUGUST , 7 ) ;

询问标准周数。您可以请求以下任一TemporalField对象:isofield。以周为基础的年

int weekOfWeekBasedYear = ld.get( IsoFields.WEEK_OF_WEEK_BASED_YEAR ) ;
int yearOfWeekBasedYear = ld.get( IsoFields.WEEK_BASED_YEAR ) ;

使用标准ISO 8601格式的YYYY-Www-D转储到控制台。

String isoOutput = yearOfWeekBasedYear + "-W" + String.format("%02d", weekOfWeekBasedYear) + "-" + dayOfWeekNumber  ;
System.out.println( ld + " is ISO 8601 week: " + isoOutput ) ;

查看此代码在IdeOne上的实时运行。通用域名格式。

2012-08-07是ISO 8601周:2012-W32-2

顺便说一句,如果Android能够运行Three10-Extra库,您会发现它的YearWeek类很有用。

java.time框架内置在Java8及更高版本中。这些类取代了麻烦的旧的遗留日期-时间类,例如java.util.DateCalendar

现在处于维护模式的Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle教程。并在Stack Overflow中搜索许多示例和解释。规范是JSR 310。

从哪里获得java.time课程?

  • JavaSE8、JavaSE9及更高版本
  • java的大部分内容。时间功能被重新移植到Java 6
  • 更高版本的Android捆绑包实现了java。时间课
  • 对于早期的Android,ThreeTenABP项目采用了ThreeTen Backport(如上所述)。了解如何使用ThreeTenABP
 类似资料:
  • 问题内容: 以前,我总是以为Vector在长度未知的情况下可以很好地用于非描述对象。据我所知,我也认为它也是线程安全的 有什么改变不应该再使用了,替代方案是什么? 问题答案: 您应该使用而不是。虽然使用了内部同步,但是对于实际的一致性而言,这很少够用,只会在真正不需要时降低执行速度。 另请参阅此stackoverflow问题。

  • 需求是再页面内打开一个弹窗然后显示外部页面。 但是外部页面都是http 无法使用

  • 问题内容: 使用hibernate实现联合查询,我必须采取什么替代方法?我知道hibernate状态目前不支持联合查询,现在我看到的建立联合的唯一方法是使用视图表。 另一个选择是使用普通的jdbc,但是这样一来,我将失去所有示例/条件查询功能,以及hibernate对表/列执行的hibernate映射验证。 问题答案: 使用hibernate实现联合查询,我必须采取什么替代方法?我知道hibern

  • 目前,Android的EditText在处理大量文本行(10000行)时速度非常慢。这种放缓似乎部分是由于EditText支持跨度,主要是由于EditText正在计算每行的宽度,这非常昂贵。EditText有什么更快的替代品,或者优化它以使其可用的方法吗? 编辑:方法跟踪如下:

  • 问题内容: 出于各种原因,在编写 Java应用程序时 ,调用会被皱眉,所以如何通知调用过程并非一切都按计划进行? 编辑: 1是任何非零退出代码的。 问题答案: 当“应用程序”实际上是较大的Java应用程序(服务器)的子应用程序(例如servlet,applet)时,对的使用会被拒绝:在这种情况下,它可能会停止JVM并因此停止所有其他子应用程序。在这种情况下,抛出适当的异常(最好由应用程序框架/服务

  • 问题内容: 我知道这个话题已经解决了上千次。但是我找不到解决办法。 我正在尝试计算列表(df2.list2)的列中出现列表(df1.list1的每一行)的频率。所有列表仅包含唯一值。List1包含约300.000行,list2包含30.000行。 我有一个有效的代码,但是它的运行速度非常慢(因为我使用的是迭代程序)。我也尝试过itertuples(),但它给了我一个错误(“要解压缩的值太多(预期2