Calendar.DAY\u OF_WEEK\u IN_MONTH相当于java8中的ZoneDateTime
我正在查看感恩节(11月第四个星期四)。Calendar.DAY\u OF_WEEK\u IN_MONTH相当于java8中的ZoneDateTime,java,datetime,java-8,calendar,Java,Datetime,Java 8,Calendar,我正在查看感恩节(11月第四个星期四)。 我已将日期时间划分为2019-11-23T08:43:14.699-07:00[美国/洛杉矶] 如何使用Java8ZoneDateTimeapi检查是否是第四个星期四 在日历中,我们有calendar.DAY\u OF_WEEK\u In_MONTH来计算一个月内的周数。ZoneDateTime中是否有此类内容 我有这个日历 // check Thanksgiving (4th Thursday of November) if (cal.get(
我已将日期时间划分为2019-11-23T08:43:14.699-07:00[美国/洛杉矶] 如何使用Java8
ZoneDateTime
api检查是否是第四个星期四
在日历中,我们有calendar.DAY\u OF_WEEK\u In_MONTH
来计算一个月内的周数。ZoneDateTime
中是否有此类内容
我有这个日历
// 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-28816:34:56.789-08:00[美国/洛杉矶]是感恩节