Функция даты обрезает секунды, где секунд 00 - PullRequest
0 голосов
/ 05 февраля 2019
OffsetDateTime odtB = OffsetDateTime.parse("2019-02-02T13:55:00Z");
odtB.toString()

выводит 2019-02-02T13:55 в качестве вывода.Поскольку из-за этого моя функция преобразования выдает ошибку !!

SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM\''YY HH:mm aa");
String parsedDate = odtB.format(otdB);

Как остановить OffsetDateTime или любой другой класс Java DateTime от обрезания секунд, когда секунды равны 00 ??

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

SimpleDateFormat из старого и устаревшего способа работы с датами.Это также не потокобезопасно и имеет много других проблем.Другими словами, не используйте его.Вам нужно использовать DateTimeFormatter Пожалуйста, прочитайте Javadoc (ссылка предоставляется).Это дает подробное объяснение, как его использовать.Однако причина вашей проблемы в том, что в вашей маске формата вы пропускаете заполнитель на секунды, поэтому, когда у вашей строки есть секунды, она не соответствует вашему формату.Измените формат на dd-MMM-YY HH:mm:ss aa, подчеркивая "ss" - заполнитель недостающих секунд, и он будет работать

0 голосов
/ 05 февраля 2019

В java8 вам больше не нужно SimpleDateFormat, это хлопотно.

Я предлагаю использовать ISO_OFFSET_DATE_TIME:

ISOсредство форматирования даты и времени, которое форматирует или анализирует дату и время со смещением, например '2011-12-03T10: 15: 30 + 01: 00'.

Пример:

import java.util.*;
import java.time.*;
import java.time.format.*;

public class HelloWorld{

     public static void main(String []args){
        OffsetDateTime odtB = OffsetDateTime.parse("2019-02-02T13:55:00Z");
        DateTimeFormatter f = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
        System.out.print(f.format(odtB)); // 2019-02-02T13:55:00Z
     }
}
0 голосов
/ 05 февраля 2019

Если вы используете java.time.LocalDateTime (что следует делать с Java 8), вы можете использовать различные DateTimeFormatter s, которые вы можете настроить (дать им шаблон), чтобы не обрезать конечные нули.Посмотрите следующий пример, используя вашу дату String со слегка скорректированным рисунком:

LocalDateTime ldt = LocalDateTime.parse("2019-02-02T13:55:00Z", DateTimeFormatter.ISO_DATE_TIME);
System.out.println(ldt.format(DateTimeFormatter.ofPattern("dd-MMM\''YY HH:mm:ss")));

Это напечатает 02-Feb'19 13:55:00, что, мы надеемся, то, что вы хотите.

...