Разбор временной метки как LocalDateTime - PullRequest
0 голосов
/ 01 марта 2019

Я хочу разобрать отметку времени в форме yyyy-MM-dd'T'HH:mm:ss как LocalDateTime.При этом он обрезает секунды, если они равны 00.

Как описано здесь , мне нужно использовать пользовательский форматер

LocalDateTime date = LocalDateTime.parse("2008-10-02T12:30:00");
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");

String dateString = date.toString();
String dateFormatted = date.format(f);

System.out.println(dateString); // 2008-10-02T12:30

Этот работает, но он возвращает String:

System.out.println(dateFormatted); // 2008-10-02T12:30:00

Когда я анализирую строку в LocalDateTime, она снова удаляет 00:

LocalDateTime dateLDT = LocalDateTime.parse(dateFormatted, f);
System.out.println(dateLDT); // 2008-10-02T12:30

Так как я могу проанализироватьдата как LocalDateTime вместо String и оставить 00 в конце?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вы должны ожидать разницу в выходе между

LocalDateTime dateLDT = LocalDateTime.parse(dateFormatted, f);
System.out.println(dateLDT);

И

System.out.println(dateLDT.format(f)) //or f.format(dateLDT)

System.out.println(dateLDT); печатает значение dateLDT.toString(), которое, как ожидается, не даст такой же выходкак ваш шаблон.

Когда вы посмотрите на LocalDateTime.toString(), вы увидите, что он делегирует часть времени LocalTime.toString(), которая условно печатает секунды:

public String toString() {
    ...
    if (secondValue > 0 || nanoValue > 0) {
        buf.append(secondValue < 10 ? ":0" : ":").append(secondValue);
        ...
        }
    }
    return buf.toString();
}

Он просто пропускаетполе секунд, если его значение равно 0.

В этом случае вам всегда нужно использовать DateTimeFormatter для форматирования даты, если вы должны быть уверены в формате вывода / ввода.

0 голосов
/ 01 марта 2019

Каждый объект даты имеет секунды.Независимо от того, выберет ли он их для реализации по умолчанию toString, значения не имеет. Если вам нужен определенный формат, вам всегда нужно использовать форматтер.

Если вы хотите увидеть секунды, либо используйте правильный форматер, либо установите точку останова и осмотрите объект.Глядя на любую toString реализацию что-нибудь , никогда не гарантируется, что вы увидите что-нибудь полезное или представите фактическое состояние объекта.Объект может просто вернуть произвольную строку даты.

Пока вы можете просто использовать date, это прекрасно, у него есть секунды.

...