gpt4 book ai didi

java - 获取 Joda Time 一年中第一周第一天的日期

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:25 25 4
gpt4 key购买 nike

我有一个 Java 日期:tempDate = Sun Jan 01 00:00:00 GMT+01:00 2012。

我想创建一个新日期,即 tempDate 年份的第一周的第一天。

即:

  Mon Jan 02 00:00:00 GMT+01:00 2012

当我尝试使用 Joda Time 时:

DateTime cal = new DateTime(tempDate).withWeekOfWeekyear(1).
withDayOfWeek(DateTimeConstants.MONDAY);

我得到了我想要的,但是在前一年:

Mon Jan 03 00:00:00 GMT+01:00 2011

如何在 Joda Time 中完成这项工作?

最佳答案

您必须了解 DateTime 的年份与其星期年份之间的区别。

Joda-Time , 按照ISO 8601 standard , 星期一是一周的第一天。然而,岁月并不总是从星期一开始。一年的第一周,仍然根据 ISO 标准,是包含该年第一个星期四的那一周。因此,一年中的某些日子可能会落入上一年或下一年的一周。

在您的示例中,2012 年 1 月 1 日实际上就是这样的一天。它属于 2011 年的第 52 周。因此它的年份 (2012) 不同于它的星期年份 (2011)。因此,如果您将日期更改为一周年的第一周,您将得到 DateTime。在 2011 年的第一周。

要使这项工作始终如一,您只需确保您的星期年份与您的年份相同:

DateTime onTheFirstDayOfTheFirstWeek = dateTime.withWeekyear(dateTime.getYear()).withWeekOfWeekyear(1).withDayOfWeek(1);

顺便说一句,您评论中的解决方法不会始终有效,特别是当系统时间所在的年份与其所在年份不同的一天时,它会失败。

关于java - 获取 Joda Time 一年中第一周第一天的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14934210/

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