我正在尝试检查感恩节(11月4日星期四)。
我有ZonedDateTime
作为2019-11-23T08:43:14.699-07:00[America/Los_Angeles]
如何使用Java 8 ZonedDateTime
API检查是否在4月4日
在日历中,我们使用Calendar.DAY_OF_WEEK_IN_MONTH
来计算一个月中的星期数。 ZonedDateTime
中有这样的东西吗?
我有这个使用日历。
// check Thanksgiving (4th Thursday of November)
if (cal.get(Calendar.MONTH) == Calendar.NOVEMBER
&& cal.get(Calendar.DAY_OF_WEEK_IN_MONTH) == 4
&& cal.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) {
return false;
}
如何使用
ZonedDateTime
实现呢? 最佳答案
您需要的是每月的一致星期。该月的第一个对齐周是从该月的1日到7日,因此包含该月的第一个星期四,无论该月是在一周的哪一天开始。第二个对齐的星期是该月的8到14,依此类推。
ZonedDateTime zdt = ZonedDateTime.parse("2019-11-23T08:43:14.699-07:00[America/Los_Angeles]");
if (zdt.getMonth().equals(Month.NOVEMBER)
&& zdt.get(ChronoField.ALIGNED_WEEK_OF_MONTH) == 4
&& zdt.getDayOfWeek().equals(DayOfWeek.THURSDAY)) {
System.out.println("" + zdt + " is on Thanksgiving");
}
由于感恩节是今年11月28日,因此上述摘要测试11月23日不会打印任何内容。试试正确的日子:
ZonedDateTime zdt = ZonedDateTime.parse("2019-11-28T17:34:56.789-07:00[America/Los_Angeles]");
2019-11-28T16:34:56.789-08:00 [美国/洛杉矶]正在感恩节
关于java - Java8中ZonedDateTime中的Calendar.DAY_OF_WEEK_IN_MONTH等效项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56584758/