Что это за формат даты? 2011-08-12T20:17:46.384Z

У меня есть следующая дата: 2011-08-12T20:17:46.384Z. Что это за формат? Я пытаюсь разобрать ее с помощью Java 1.4 через DateFormat.getDateInstance().parse(dateStr) и получаю

java.text.ParseException: Unparseable date: "2011-08-12T20:17:46.384Z"

Я думаю, что мне следует использовать SimpleDateFormat для разбора, но сначала я должен знать строку формата. Пока у меня есть только yyyy-MM-dd, потому что я не знаю, что означает T в этой строке - что-то связанное с часовым поясом? Эта строка даты исходит из тега lcmis:downloadedOn, показанного на Files CMIS download history media type.

318
задан Sarah Vessels 6 December 2011 в 07:45
поделиться

2 ответа

@John-Skeet дал мне ключ к разгадке для устранения моей собственной проблемы вокруг этого. Как младший программист эту маленькую проблему легко пропустить и трудно диагностировать. Таким образом, я совместно использую его в надеждах, это поможет кому-то.

Моя проблема была то, что я хотел проанализировать следующую строку, ограничивающую метку времени от JSON, я не имею никакого влияния и помещаю ее в более полезные переменные. Но я продолжал получать ошибки.

Так, учитывая следующее (обращают внимание на строковый параметр внутри ofPattern ();

String str = "20190927T182730.000Z"

LocalDateTime fin;
fin = LocalDateTime.parse( str, DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss.SSSZ") );

Ошибка:

Exception in thread "main" java.time.format.DateTimeParseException: Text 
'20190927T182730.000Z' could not be parsed at index 19

проблема? Z в конце Шаблона должен быть перенесен в 'Z' точно так же, как 'T'. Изменение "yyyyMMdd'T'HHmmss.SSSZ" к "yyyyMMdd'T'HHmmss.SSS'Z'" и это работает.

Удаление Z от шаблона, в целом также ведомого к ошибкам.

Откровенно говоря, я ожидал бы, что класс Java будет ожидать это.

-1
ответ дан 23 November 2019 в 01:02
поделиться

Если Вы, парни ищут решение для Android, можно использовать следующий код для получения секунд эпохи от строки метки времени.

public static long timestampToEpochSeconds(String srcTimestamp) {
    long epoch = 0;

    try {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            Instant instant = Instant.parse(srcTimestamp);
            epoch = instant.getEpochSecond();
        } else {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSSSS'Z'", Locale.getDefault());
            sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
            Date date = sdf.parse(srcTimestamp);
            if (date != null) {
                epoch = date.getTime() / 1000;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return epoch;
}

Демонстрационный вход: Демонстрационный вывод 2019-10-15T05:51:31.537979Z

: 1571128673

0
ответ дан 23 November 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: