Calendar.DAY\u OF_WEEK\u IN_MONTH相当于java8中的ZoneDateTime

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(

我正在查看感恩节(11月第四个星期四)。
我已将日期时间划分为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[美国/洛杉矶]是感恩节