我需要从星期一开始写日历。
就目前的日期(07/8月/ 2012日)而言,第一天为星期一,星期天为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));
有什么帮助吗?
最佳答案:
DRLocalDate.of( 2012 , Month.AUGUST , 7 )
.get( IsoFields.WEEK_OF_WEEK_BASED_YEAR )
三十二
现场
不确定您的问题的直接答案,但可能在游戏中有不同的Locale值。在Calendar中,一周的定义因地区而异。
但这是没有意义的。您应该使用java.time类替换Calendar类。
Java.时间
Calendar是麻烦的旧日期时间类的一部分,现在是遗留的,被java.time类取代。对于早期的android,请参阅下面的最后一个项目符号。
你必须定义你所说的周数。定义周数和周数有不同的方法。
默认情况下,java.time类使用标准的ISO 8601 definition:week 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是ISO 8601周:2012-W32-2
顺便说一下,如果android能够运行ThreeTen-Extra库,您会发现它的YearWeek类非常有用。
关于java.time
将AA>框架构建到Java 8和以后。这些类取代了以前麻烦的日期时间类,如java.time,legacy,&java.util.Date。
现在在Calendar中的SimpleDateFormat项目建议迁移到Joda-Time类。
要了解更多信息,请参见maintenance mode。和搜索堆栈溢出的许多例子和解释。规格为java.time。
在哪里获得java.time类?
Oracle Tutorial、JSR 310及更高版本
内置的。
标准JAVA API的一部分与捆绑实现。
Java 9添加了一些小的特性和修复。
Java SE 8和Java SE 9
Java.TimeActudio的许多功能在Java SE 6中被移植到Java 6和7。
Java SE 7
更高版本的android包java.time类的实现。
对于早期的android,ThreeTen-Backport项目采用了threeten后台端口(上面提到过)。参阅Android。