Как сохранить миллисекундные данные в java simpledateFormat

В основном я пытаюсь преобразовать строковые данные в формат Timestamp. Когда я преобразовал данные в формат метки времени, SimpleDateFormat добавил три минуты. Потому что миллисекундные данные равны 3 минутам. Но я хочу сохранить миллисекундные данные по значению метки времени.

Код:

public Double TimestampTest(String Timestamp ){
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    Date parsedDate = null;
    try {
        parsedDate = dateFormat.parse(Timestamp);   
    } catch (ParseException e1) {
        e1.printStackTrace();
    }
    Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
...
} 

Значение метки времени

2002-04-17 23:45:58.983

Для тестового примера

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse("2015-04-22T19:54:11.219983Z"));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS'Z'").parse("2015-04-22 19:54:11.219983Z"));

Результаты одинаковы для обоих из них

Wed Apr 22 19:57:50 EEST 2015

Wed Apr 22 19:57:50 EEST 2015

Потому что

219 983 milliseconds = 3.66638333 minutes

Подводя итог, я хочу сохранить данные ms. Есть ли способ это сделать?


person dgn    schedule 09.07.2017    source источник
comment
SimpleDateFormat имеет точность до миллисекунды - 3 цифры после запятой. Если их больше 3, вы получите странные результаты: stackoverflow.com/q/36055717/7605325 - stackoverflow.com/q/44979279/7605325   -  person    schedule 09.07.2017


Ответы (1)


Насколько я понимаю, у вас в конце строки микросекунды, а не миллисекунды. Старые устаревшие классы Date и SimpleDateFormat не поддерживают микросекунды. Но вы можете использовать новые классы java.time:

System.out.println(ZonedDateTime.parse("2015-04-22T19:54:11.219983Z",
                                       DateTimeFormatter.ofPattern(("yyyy-MM-dd'T'HH:mm:ss.SSSSSSVV"))));
person JB Nizet    schedule 09.07.2017
comment
Я считаю, что в этом случае можно просто использовать parse без форматтера - хотя я не перед компьютером, чтобы проверить - person ; 09.07.2017
comment
@ Хьюго прав. Если вам нужно ровно 6 знаков после запятой, вам нужен форматировщик, но в большинстве случаев явный форматировщик просто загромождает код. ZonedDateTime.parse("2015-04-22T19:54:11.219983Z") работает. В противном случае ответ очень хороший. - person Ole V.V.; 18.07.2017