gpt4 book ai didi

android - 如果 withYear 设置为 2016,JodaTime 将始终更改为 2015

转载 作者:搜寻专家 更新时间:2023-11-01 07:47:15 24 4
gpt4 key购买 nike

这真的让我发疯。下面的代码

DateTime dt = new DateTime()
.withYear(2014)
.withWeekOfWeekyear(52)
.withDayOfWeek(1);
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("d MMM yyyy");
String firstDayOfWeek = dateTimeFormatter.print(dt);
Log.v(FILE_NAME,"display date? " + firstDayOfWeek);
dt = new DateTime()
.withYear(2015)
.withWeekOfWeekyear(52)
.withDayOfWeek(1);
String lastDayOfWeek = dateTimeFormatter.print(dt);
Log.v(FILE_NAME,"display date? " + lastDayOfWeek);
dt = new DateTime()
.withYear(2016)
.withWeekOfWeekyear(52)
.withDayOfWeek(1);
lastDayOfWeek = dateTimeFormatter.print(dt);
Log.v(FILE_NAME,"display date? " + lastDayOfWeek);

不知何故总会输出:

display date? 22 Dec 2014
display date? 21 Dec 2015
display date? 21 Dec 2015

如您所见,最后显示的日期应该显示为 2016 年,而不是 2015 年。似乎每次我将 withYear 设置为 2016 年,它都会神奇地变为 2015 年。这是一个错误还是我做错了什么?我已经多次清理和重建我的项目,但输出是一样的。

最佳答案

withYear(...) 方法并不像您想象的那样,因为它使用标准日历年而不是 ISO-8601 论文中描述的星期几日期。请比较以下两个 fragment 。只有第二个可以满足您的需求:

DateTime dt = new DateTime().withYear(2016).withWeekOfWeekyear(52).withDayOfWeek(1);
System.out.println("joda=" + dt); // joda=2015-12-21T18:26:12.776+01:00

DateTime dt2 =
new DateTime().withWeekyear(2016).withWeekOfWeekyear(52).withDayOfWeek(1);
System.out.println("joda=" + dt2); // joda=2016-12-26T18:27:59.606+01:00

另见 documentation .日历年和基于周的年份之间的细微差别仅在年末或年初(如今天)才会明显。

详细解释了行为:

如果为今天选择 new DateTime(),则为 2017 年 1 月 2 日,然后将日历年设置为 2016,结果为:2016-01-02。但是这个日期是属于 week-based-year 2015 的第 53 周。第 53 周从 2015-12-28 开始,所以表达式 withWeekOfWeekyear(52) 会倒退一周到 2015-12-21(你在第一种情况下观察到的)。

关于android - 如果 withYear 设置为 2016,JodaTime 将始终更改为 2015,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41429998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com