基于Java 8中的LocalDate.Now()如何获取一周的第一天的日期?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (5050)

我想要基于LocalDate.Now()的一周第一天的日期。JodaTime可以实现以下内容,但似乎从Java 8中的新日期API中删除了以下内容。

LocalDate now = LocalDate.now();
System.out.println(now.withDayOfWeek(DateTimeConstants.MONDAY));

我不能调用‘withDayOfWeek()’,因为它不存在。如何根据一些本地日期来确定一周的第一天的日期?

提问于
用户回答回答于
用户回答回答于

表达式System.out.println(now.with(DayOfWeek.MONDAY))因为它使用ISO-8601,因此它总是向后跳到上星期一(或者在星期一,以防日期指向星期一),因此它与地区无关。如果您需要解决这些问题,最好使用本地化字段。WeekFields.dayOfWeek():

LocalDate now = LocalDate.now();
TemporalField fieldISO = WeekFields.of(Locale.FRANCE).dayOfWeek();
System.out.println(now.with(fieldISO, 1)); // 2015-02-09 (Monday)

TemporalField fieldUS = WeekFields.of(Locale.US).dayOfWeek();
System.out.println(now.with(fieldUS, 1)); // 2015-02-08 (Sunday)

另一个例子是下面的评论:

LocalDate ld = LocalDate.of(2017, 8, 18); // Friday as original date

System.out.println(
    ld.with(DayOfWeek.SUNDAY)); // 2017-08-20 (2 days later according to ISO)

// Now let's again set the date to Sunday, but this time in a localized way...
// the method dayOfWeek() uses localized numbering (Sunday = 1 in US and = 7 in France)

System.out.println(ld.with(WeekFields.of(Locale.US).dayOfWeek(), 1L)); // 2017-08-13
System.out.println(ld.with(WeekFields.of(Locale.FRANCE).dayOfWeek(), 7L)); // 2017-08-20

例子表明:居住在美国的人希望能活到最后,而不是下个星期天,因为周日被认为是美国一周的第一天。简单的基于ISO的表达式with(DayOfWeek.SUNDAY)忽略此本地化问题。

扫码关注云+社区

领取腾讯云代金券