То, что вам нужно, это выровненная неделя месяца. Первая выровненная неделя месяца - от 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");
}
Поскольку День Благодарения наступает 28 ноября этого года, вышеприведенное тестирование фрагмента 23 ноября ничего не печатает. Попробуйте с правильным днем вместо:
ZonedDateTime zdt = ZonedDateTime.parse("2019-11-28T17:34:56.789-07:00[America/Los_Angeles]");
2019-11-28T16: 34: 56.789-08: 00 [Америка / Los_Angeles] в День Благодарения