为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 LocalDateTime 转换为`"yyyy-MM-dd'T'HH:mm:ss'Z'"`

如何将 LocalDateTime 转换为`"yyyy-MM-dd'T'HH:mm:ss'Z'"`

森栏 2021-10-13 14:07:07
我正在尝试将字符串的格式解析"yyyy-MM-dd'T'HH:mm:ss'Z'"为LocalDateTime如果日期是sunday或者saturday我想将日期更改为monday相同格式并返回,我知道我可以通过使用添加天数plusDaysString str = "2018-09-22T12:30:10Z";DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");LocalDateTime dateTime = LocalDateTime.parse(str, formatter);System.out.println(dateTime.plusDays(2));  //2018-09-24T12:30:10但我想以格式返回 2018-09-24T12:30:10Z
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

   String str = "2018-09-22T12:30:10Z";

    OffsetDateTime dateTime = OffsetDateTime.parse(str);

    DayOfWeek dow = dateTime.getDayOfWeek();

    if (dow.equals(DayOfWeek.SATURDAY) || dow.equals(DayOfWeek.SUNDAY)) {

        dateTime = dateTime.with(TemporalAdjusters.next(DayOfWeek.MONDAY));

    }

    System.out.println(dateTime);

这个片段的输出是:


2018-09-24T12:30:10Z


它从字符串中获取日期,在本例中为 9 月 22 日,并且由于它是星期六,它确实会调整到下一个星期一。它不使用您的 JVM 时区设置。


您的字符串采用 ISO 8601 格式,这是 java.time 中的类作为默认值解析和生成的标准格式,因此无需通过任何DateTimeFormatter. 在Z该串中表示UTC(换言之,从UTC偏移量0),所以解析它作为偏移并进入OffsetDateTime而非LocalDateTime以保持从所述串中的所有信息。这也使得返回相同格式变得容易。


如果您需要返回 a String,请使用dateTime.toString().


查看完整回答
反对 回复 2021-10-13
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

转换为Instant时间。

System.out.println(dateTime.plusDays(2).toInstant(ZoneOffset.UTC)));


查看完整回答
反对 回复 2021-10-13
  • 3 回答
  • 0 关注
  • 269 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信