首页 > 解决方案 > OffsetDateTime toString() 返回不同格式的日期字符串

问题描述

我有这种格式的日期yyyy-MM-dd'T'HH:mm:ss'Z',但是当我使用OffsetDateTime.parse(date);它解析它时,它会通过消除返回字符串seconds

逻辑:从日期获取日期,如果是,Saturday或者Sunday将日期更改为星期一并返回日期字符串

String date = "2018-12-30T06:00:00Z";

System.out.println(date);

try {
    OffsetDateTime dateTime = OffsetDateTime.parse(date);

    System.out.println(dateTime);           //2018-12-30T06:00Z

    DayOfWeek day = dateTime.getDayOfWeek();
    // check if price change  date is Sunday or Saturday and change it to Monday
    if (day.equals(DayOfWeek.SATURDAY) || day.equals(DayOfWeek.SUNDAY)) {

        String finalDateTime = dateTime.with(TemporalAdjusters.next(DayOfWeek.MONDAY)).toString();
         System.out.println(finalDateTime);      //2018-12-31T06:00Z
    }else {
        System.out.println(date);
    }
    }catch(Exception ex) {
        System.out.println(ex);
        System.out.println(date);
    }   

我需要以相同的输入格式返回字符串yyyy-MM-dd'T'HH:mm:ss'Z'

标签: javadate

解决方案


根据OffsetDateTime.toString()方法 javadoc,使用值的最短可能格式,而省略的部分暗示为零。最短的可能格式2018-12-30T06:00:00Zuuuu-MM-dd'T'HH:mmXXXXX秒和纳秒被跳过:

输出将是以下 ISO-8601 格式之一:

  • uuuu-MM-dd'T'HH:mmXXXXXX
  • uuuu-MM-dd'T'HH:mm:ssXXXXX
  • uuuu-MM-dd'T'HH:mm:ss.SSSXXXXXX
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSSXXXXXX
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSSXXXXX

使用的格式将是最短的输出时间的完整值,其中省略的部分被暗示为零。

如果您需要精确的格式,请使用DateTimeFormatter具有特定模式的实例来输出日期:

String date = "2018-12-30T06:00:00Z";
OffsetDateTime dt = OffsetDateTime.parse(date);
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
System.out.println(fmt.format(dt));

推荐阅读