tl; dr
Instant // The modern way to represent a moment in UTC. Resolves to nanoseconds.
.parse( // Parse text in standard ISO 8601 format without specifying any formatting pattern.
"2020-01-16T19:32:13.540000Z"
) // Returns an `Instant` object.
.truncatedTo( // Lop off part of the data.
ChronoUnit.SECONDS // Keep whole seconds and larger. Lose the fractional second, if any.
) // Returns a new fresh second `Instant` object, per immutable objects pattern. Original `Instant` is left unaffected.
.toString() // Generate text in standard ISO 8601 format.
См. Этот код, запущенный в режиме реального времени на IdeOne.com .
2020-01-16T19: 32: 13Z
Подробности
Вы смешиваете ужасные унаследованные классы даты и времени, такие как SimpleDateFormat
, с их современными заменами. Не делайте этого. Используйте только классы из пакетов java .time .
Класс Instant
знает, как анализировать строки в стандартном ISO 8601 формат, такой как ваша строка ввода. Не нужно указывать шаблон форматирования.
String input = "2020-01-16T19:32:13.540000Z" ; // Using standard ISO 8601 format.
Instant instant = Instant.parse( input ) ; // By default parses ISO 8601 strings. No need to specify a formatting pattern.
Если вы хотите отбросить доли секунды, усечь .
Instant instantWholeSeconds = instant.truncatedTo( ChronoUnit.SECONDS ) ;
Создать текст в стандартном формате ИСО 8601 форматировать с помощью вызова Instant::toString()
.
String output = instantWholeSeconds.toString() ; // Generate text in standard ISO 8601 format.
Если вы хотите отсчет секунд с эталонной эпохи первого момента 1970 г. в UT C опросить объект Instant
, вызвав getEpochSecond
.
long secondsSinceEpoch = instant.getEpochSecond() ;
пытаюсь проанализировать метку времени с помощью SimpleDateFormat
Никогда не используйте SimpleDateFormat
снова. Устаревший с принятием JSR 310 .
Унаследованные классы даты и времени - чертовски ужасный беспорядок. Избегайте их, как чумы.