当前位置: 首页 > 知识库问答 >
问题:

为什么十三个呢。53周年份的组织日期库返回日期(53周)?

锺离赤岩
2023-03-14

使用https://www.threeten.org/threeten-extra图书馆

当计算一个月的第一个星期日时,给定周数和年份,我注意到如果我使用2018年和第53周,我得到的结果是2018-12-02年的第一个星期日。

然而,2018年不是一个53周的年份,所以我想知道我是做错了什么,还是2018年有什么特别的地方?我没有看到周开始日期或其他53周的条件得到满足,但我可能错过了一些东西。

在其他测试中,如2011年(也不是一周和一年53周),日期逻辑将结果包装为2012-01-01(明年第一周的第一个星期日)。

2020年、2015年和2019年(所有53周年份)显示相应年份12月的预期结果值。

以下是代码:

YearWeek yw = YearWeek.of(year, weekNumber);
//Get the date of the first day of that week.
LocalDate ld = yw.atDay( DayOfWeek.MONDAY ) ;
// Use a TemporalAdjuster to get nth day-of-week of that month date’s month.
TemporalAdjuster ta = TemporalAdjusters.dayOfWeekInMonth( 1 , DayOfWeek.SUNDAY ) ;
//  TemporalAdjuster ta = TemporalAdjusters.firstDayOfMonth();
LocalDate firstSunday = ld.with( ta ) ;
return firstSunday.toString();

建议?

共有1个答案

羊舌富
2023-03-14

这就是YearWeek.of所做的:

从基于周的年和周中获取YearWeek的实例。

如果该周为53周,而该年没有53周,则选择下一年的第一周。

因此,对于(2018,53),它选择2019年的第一周,因为2018年只有52周。本周从2018年12月31日开始,到2019年1月06日结束。

然后得到本周的星期一,即2018-12-31,并将该日期调整为本月的第一个星期日。这里的“月份”是12月,结果是2018-12-02。

同样,对于(2011,53),你得到2012年的第一周,因为2011年只有52周。但与2019年不同,这是从2012-01-02开始到2012-01-08结束的一周,所以没有问题。

那么2018年有什么特别之处呢?我想最后一周在一年的最后一天之前结束吧?这使得明年的第一周从12月开始。

 类似资料:
  • 问题内容: 哪里是。 当我执行以上操作时,时间变成 我在做错什么?这是一个错误吗?我希望它是2013年的第一周,而不是最后一周。 问题答案: 看这里。 该weekyear,模式字母的,周是为了与使用,weekyear。从javadoc的 将模式更改为 然后您将解析为 根据您的情况,2013年的第一周始于2012年。

  • 问题内容: 我表中的日期存储为十进制年份。一个示例翻译为。 我想将十进制年份转换为Oracle的日期格式。 我找到了在Excel中完成此操作的人:十进制的年初至今公式? 但是,我不太清楚如何将逻辑转换为Oracle PL / SQL。 问题答案: 如果您假设小数部分是根据给 定年份中的天数 (即365或366,取决于是否是leap年)来计算的,则可以执行以下操作:

  • 问题内容: 什么是最好的方式来知道某个日期是否与另一个日期在同一周(或一年或一个月),最好是带扩展名,并且 仅使用Swift ? 例如,在Objective-C中,我有 请不要提出桥接到的解决方案 问题答案: 您可以使用日历方法进行检查,如下所示: Xcode 11•Swift 5.1

  • 问题内容: 根据doc,日历set()为: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html#set%28int,%20int,%20int%29 码: 输出: 为什么不是1月30日??? 问题答案: 1月是2月。2月30日更改为3月1日。您应该将月份设置为0。最好是使用Calendar中定义的常量:

  • 假设我有一些账单,上面有开始日期和结束日期。 我要检查的商业规则是 例如,3月10日到4月9日大约相隔一个月,所以我用它来检查任何两个连续的账单开始日期(4月10日和3月10日)是否相隔一个月。 现在我的问题是求周期的长度。例如,假设我有以下数据集 我正在使用JodaTime库,所以我说类似这样的话 它返回0,这是正确的,但没有用处。 结果是1,尽管相隔一天。 有什么更好的方法来做到这一点?我可以

  • 问题内容: 例如: 版画1 乔达时间也是如此。 问题答案: Year of Year的定义是依赖的。 其他帖子中讨论了在美国如何定义。例如在德国(DIN 1355-1 / ISO 8601):一年的第一周*是新年中具有四天或以上的第一周。 *一周的第一天是星期一,一周的最后一天是星期日 JavaCalendar注重语言环境。例如: 印刷品: 添加 对于美国(我认为墨西哥也是如此),每年的1.星期是