OffsetDateTime toString () возвращает строку даты другого формата - PullRequest
0 голосов
/ 02 января 2019

У меня есть дата в этом формате yyyy-MM-dd'T'HH:mm:ss'Z', но пока я ее анализирую, используя OffsetDateTime.parse(date);, она возвращает строку путем исключения seconds

Логика: Получить деньс даты, если это Saturday или Sunday, измените день на понедельник и верните дату String

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'

1 Ответ

0 голосов
/ 02 января 2019

В соответствии с OffsetDateTime.toString() методом javadoc используется кратчайший возможный формат значения, в то время как пропущенные части подразумеваются равными нулю. Кратчайший возможный формат для 2018-12-30T06:00:00Z - uuuu-MM-dd'T'HH:mmXXXXX, поэтому пропускаются секунды и нано:

На выходе будет один из следующих форматов ISO-8601:

  • уууу-MM-dd'T'HH: mmXXXXX
  • уууу-MM-dd'T'HH: мм: ssXXXXX
  • уууу-MM-dd'T'HH: мм: ss.SSSXXXXX
  • уууу-MM-dd'T'HH: мм: ss.SSSSSSXXXXX
  • уууу-MM-dd'T'HH: мм: 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));
...