tl; др
ZonedDateTime // Represent a moment in the wall-clock time used by the people of a certain region (a time zone).
.now() // Capture current moment. Better to pass optional argument for `ZoneId` (time zone). Returns a `ZonedDateTime` object.
.format( // Generate a `String` with text in a custom formatting pattern.
DateTimeFormatter.ofPattern( "uuuu-MM-dd_HH-mm-ss-SSS" )
) // Returns a `String` object.
2018-08-26_15-43-24-895
Instant
Вы используетехлопотные старые классы даты и времени.Вместо этого используйте классы java.time.
Если вы хотите использовать дату и время в формате UTC, используйте класс Instant
.Этот класс поддерживает наносекундное разрешение, более чем достаточно для миллисекунд.
Instant instant = Instant.now();
String output = instant.toString();
Этот метод toString
использует форматер DateTimeFormatter.ISO_INSTANT
, который печатает 0, 3,6 или 9 цифр в десятичной дроби, столько, сколько необходимо для фактического значения данных.
В Java 8 текущий момент фиксируется только до миллисекунд, но новая реализация Clock
в Java 9 может захватывать до наносекунд .Обрезайте до миллисекунд, если это ваше требование.Укажите желаемое усечение с помощью TemporalUnit
, как это реализовано в ChronoUnit.MILLIS
.
Instant instant = Instant.now().truncatedTo( ChronoUnit.MILLIS );
ZonedDateTime
Если вы хотитеукажите часовой пояс, примените ZoneId
, чтобы получить ZonedDateTime
.
Instant instant = Instant.now();
instant.toString (): 2018-08-26T19: 43: 24.895621Z
Instant instantTruncated = instant.truncatedTo( ChronoUnit.MILLIS );
instantTruncated.toString (): 2018-08-26T19: 43: 24,895Z
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );
String output = zdt.toString();
2018-08-26T15: 43: 24,895621-04:00 [Америка / Монреаль]
Снова, если вы хотите другие форматы, найдите Переполнение стека для DateTimeFormatter
.
DateTimeFormatter
Если вы хотитечтобы задать три цифры для миллисекунд, даже если все значения равны нулю, укажите пользовательский шаблон форматирования, используя DateTimeFormatter
class.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd_HH-mm-ss-SSS" ) ;
String output = zdt.format( f ) ;
2018-08-26_15-43-24-895
О java.time
Среда java.time встроена в Java 8 ипотом.Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?