我需要从星期一开始我的日历。 根据今天的日期(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));
有什么帮助吗?
最佳答案
tl;dr
LocalDate.of( 2012 , Month.AUGUST , 7 )
.get( IsoFields.WEEK_OF_WEEK_BASED_YEAR )
32
语言环境
不确定您问题的直接答案,但很可能是不同的 Locale
值在起作用。在 Calendar
中,星期的定义因地区而异。
但是这是没有实际意义的。您应该使用替换 Calendar
类的 java.time 类。
java.time
Calendar
是麻烦的旧日期时间类的一部分,这些类现在已经遗留,被 java.time 类取代。对于早期的 Android,请参阅下面的最后一个项目符号。
您必须定义周数的含义。有不同的方法来定义周和周数。
默认情况下,java.time 类使用标准 ISO 8601 definition :第 1 周是日历年的第一个星期四,从星期一开始(如您要求的那样)。所以年有 52 或 53 周。日历年的第一天和最后几天可能会落在基于周的前/后年。
LocalDate
类表示没有时间和时区的纯日期值。
LocalDate ld = LocalDate.of( 2012 , Month.AUGUST , 7 ) ;
查询标准周数。您可以要求其中任何一个 TemporalField
对象:IsoFields.WEEK_BASED_YEAR
& IsoFields.WEEK_OF_WEEK_BASED_YEAR
int weekOfWeekBasedYear = ld.get( IsoFields.WEEK_OF_WEEK_BASED_YEAR ) ;
int yearOfWeekBasedYear = ld.get( IsoFields.WEEK_BASED_YEAR ) ;
使用标准转储到控制台 ISO 8601 format of YYYY-Www-D
.
String isoOutput = yearOfWeekBasedYear + "-W" + String.format("%02d", weekOfWeekBasedYear) + "-" + dayOfWeekNumber ;
System.out.println( ld + " is ISO 8601 week: " + isoOutput ) ;
查看此 code run live at IdeOne.com .
2012-08-07 is ISO 8601 week: 2012-W32-2
顺便说一下,如果 Android 能够运行 ThreeTen-Extra图书馆,你会发现它的YearWeek
类有用。
关于java.time
java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date
, Calendar
, & SimpleDateFormat
.
Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。
要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .
从哪里获得 java.time 类?
- Java SE 8 , Java SE 9 , 然后
- 内置。
- 带有 bundle 实现的标准 Java API 的一部分。
- Java 9 添加了一些次要功能和修复。
- Java SE 6和 Java SE 7
- 许多 java.time 功能在 ThreeTen-Backport 中被反向移植到 Java 6 和 7 .
- Android
- 更高版本的 Android bundle 了 java.time 类的实现。
- 对于早期的 Android,ThreeTenABP项目适应 ThreeTen-Backport(如上所述)。参见 How to use ThreeTenABP… .
关于java - Android Java 日历替代品,具有以下功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11845425/