У меня есть CSV, который содержит метки времени в следующих форматах:
гггг-мм-дд чч: мм: ссх
гггг-мм-дд ЧЧ: мм: сс.SX
гггг-мм-дд ЧЧ: мм: сс.SSX
гггг-мм-дд ЧЧ: мм: сс.SSSX
гггг-мм-дд ЧЧ: мм: сс.SSSSX
гггг-мм-дд ЧЧ: мм: сс.SSSSSX
гггг-мм-дд ЧЧ: мм: сс.SSSSSSX
Как мне разобрать строку, которая может содержать любой из вышеперечисленных форматов?
Следующий код может анализировать отметку времени, когда присутствует 3-6 наносекунд, но завершается неудачно, когда нет наносекунд или меньше 3:
String time = "2018-11-02 11:39:03.0438-04";
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSX");
Date date = sdf.parse(time);
System.out.println("Date and Time: " + date.getTime());
В настоящее время у меня есть метод, который перебирает 0-6 и генерирует строку с числом «S», равным значению итерированной переменной. Метод пытается проанализировать строку в try / catch, пока строка не будет успешно проанализирована. Например, строка 2018-11-02 11:39:03.0438-04
попытается проанализировать пять раз, прежде чем она будет успешной.
CSV - это экспорт таблицы PostgreSQL, в которой есть столбцы с типом TIMESTAMP WITH TIME ZONE, и, похоже, он обрезает конечные позиции «0» наносекунд.
Я использую Java 8 и открыт для любых внешних библиотек (Joda?).