Java8中ZonedDateTime中的Calendar.DAY_OF_WEEK_IN_MONTH等效项

我正在尝试检查感恩节(11月4日星期四).
我的ZonedDateTime为2019-11-23T08:43:14.699-07:00 [America / Los_Angeles]

 

如何使用Java 8 ZonedDateTime API检查是否在星期四第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[America/Los_Angeles] is on Thanksgiving

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java,`DateTimeFormatter`是一个强大的工具,用于将日期和时间字符串转换为`LocalDateTime`、`ZonedDateTime`等对象,以及相反的操作。这里列举一些常见的`DateTimeFormatter`常量及其对应的日期格式: 1. **DateTimeFormatter.BASIC_ISO_DATE**: 这个常量表示ISO 8601基本格式的日期,即"yyyy-MM-dd"。比如,"2023-04-15"会被解析为日期2023年4月15日。 2. **DateTimeFormatter.RFC_1123_DATE_TIME**: 格式类似于 "EEE, dd MMM yyyy HH:mm:ss zzz", 用于HTTP/1.1的日期时间,例如 "Sun, 15 Apr 2023 12:30:00 GMT"。 3. **DateTimeFormatter.ISO_LOCAL_DATE**: 表示本地日期,如 "yyyy-MM-dd",但不包含时间部分。 4. **DateTimeFormatter.ISO_DATE**: 类似于ISO_LOCAL_DATE,但只包含年和月,没有日。 5. **DateTimeFormatter.ISO_LOCAL_DATE_TIME**: 包含了年、月、日、小时、分钟和秒,但没有时区信息。 6. **DateTimeFormatter.ISO_ZONED_DATE_TIME**: 适用于包含时区信息的日期时间,格式是 "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"。 7. **DateTimeFormatter.MYSQL**: MySQL数据库特定的日期时间格式,比如 "yyyy-MM-dd HH:mm:ss"。 8. **DateTimeFormatter.JODA_TIME**: Joda-Time库的日期时间格式,可能包括 "yyyy-MM-dd HH:mm:ss" 或 "yyyy-MM-dd HH:mm:ss.SSS"。 使用这些常量时,你可以直接创建一个`DateTimeFormatter`实例,并用它来解析或格式化日期字符串。例如: ```java DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE; String dateString = "2023-04-15"; LocalDate date = LocalDate.parse(dateString, formatter); ``` 如果你需要自定义格式,可以使用`DateTimeFormatter.ofPattern()`方法,传入具体的模式字符串。这样会更加灵活,但解析和生成的字符串必须遵循指定的模式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值