Fil*_*lip 3 java datetime jodatime
我有一个Java日期:tempDate = Sun Jan 01 00:00:00 GMT + 01:00 2012.
我想创建一个新的日期,即tempDate年份第一周的第一天.
那是:
Mon Jan 02 00:00:00 GMT+01:00 2012
Run Code Online (Sandbox Code Playgroud)
当我尝试使用Joda时间时:
DateTime cal = new DateTime(tempDate).withWeekOfWeekyear(1).
withDayOfWeek(DateTimeConstants.MONDAY);
Run Code Online (Sandbox Code Playgroud)
我得到了我想要的,但在前一年:
Mon Jan 03 00:00:00 GMT+01:00 2011
Run Code Online (Sandbox Code Playgroud)
我如何在Joda Time中完成这项工作?
您必须了解DateTime的年份与其周年之间的差异.
在Joda-Time,根据ISO 8601标准,星期一是一周的第一天.然而,岁月并不总是在星期一开始.按照ISO标准,一年的第一周是包含该年第一个星期四的一周.因此,一年中的某些日子可能会落入上一年或下一年的一周.
在你的例子01/01/2012实际上是这样的一天.它属于2011年第52周.所以它的一年(2012年)与其一周(2011年)不同.因此,如果您将日期更改为其周年的第一周,您将在2011年的第一周获得日期时间.
为了使这项工作始终如一,您只需确保您的周年与您的年份相同:
DateTime onTheFirstDayOfTheFirstWeek = dateTime.withWeekyear(dateTime.getYear()).withWeekOfWeekyear(1).withDayOfWeek(1);
Run Code Online (Sandbox Code Playgroud)
顺便说一下,你的评论中的解决方法将不能始终如一地工作,特别是当系统时间与一年中的年份不同时,它将失败.
| 归档时间: |
|
| 查看次数: |
5936 次 |
| 最近记录: |