Как разобрать дату и время, как это - PullRequest
0 голосов
/ 14 ноября 2018

Я понимаю, что это звучит странно, но у меня есть datettime 2018-04-04 12:59:575Z.Давайте предположим, что это реально, а не ошибка, и я не могу найти никакого стандарта для анализа этого.Есть ли способ разобрать его в Java?Что могут означать 3 числа 575 в конце?

edit: Существует сильное сомнение в том, что это правильная дата и время в моих выборках.Я собираюсь сообщить об ошибке создателю.Спасибо всем за хорошие советы.

Ответы [ 4 ]

0 голосов
/ 14 ноября 2018

Что могут означать 3 цифры 575 в конце?

Мои догадки включают:

  • Это 12: 59: 57.5 (значение .5)полсекунды (при условии, что десятичная точка не указана в формате).
  • 575 - миллисекунды секунды, а секунды были забыты.Таким образом, это 12: 59: ss 575, где мы не знаем, каким должен был быть ss.
  • Это 59 575 минут после 12 часов (то же самое, что 12: 59: 34.5).В защиту этой опции ISO 8601 допускает десятичные дроби в минутах, но тогда десятичная точка должна быть либо запятой, либо точкой, а не двоеточием.

Я не могу найти никакого стандарта для анализа этого.

Я вполне уверен, что его нет.

Есть ли способ его проанализироватьв Java?

Нет, извините, не до тех пор, пока мы не знаем, что означает эта строка.

0 голосов
/ 14 ноября 2018

Может быть два возможных варианта для 59 в конце. Это может быть минуты или секунды . Я думаю, что минут более вероятно, потому что секунды могут быть не ценными. 575 определенно миллисекунда .

DateTimeFormatter dfMinutes = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:SSS");
DateTimeFormatter dfSeconds = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:ss:SSS");

P.S. Это может быть yyyy-dd-MM вместо yyyy-MM-dd. Но, как я вижу, мы находимся в одном регионе.

0 голосов
/ 14 ноября 2018

Вы можете использовать joda time api для анализа входной строки, как показано ниже: -

String strDate="2018-04-04 12:59:575Z";
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:SSSZ");
DateTime dt = formatter.parseDateTime(strDate);
System.out.println(dt); //2018-04-04T08:59:00.575-04:00

575 во входной строке составляет миллисекунды.

Но вам нужно выяснить,Какова точность до миллисекунд, если вы не включили секунды.

0 голосов
/ 14 ноября 2018

Это, вероятно, означает, что есть ошибка в том, откуда взялась эта строка.Я бы провел там расследование, если бы у меня был доступ к этому коду, или сообщил бы об ошибке его владельцу.

Нет смысла анализировать ошибочные данные и гадать, что означают цифры.Плохие данные хуже, чем отсутствие данных.

...