ТЛ; др
Instant.now()
.toString()
2016-05-06T23: 24: 25.694Z
ZonedDateTime
.now
(
ZoneId.of( "America/Montreal" )
)
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " )
2016-05-06 19: 24: 25.694
java.time
В Java 8 и более поздних версиях у нас есть инфраструктура java.time, встроенная в Java 8 и более поздние версии . Эти новые классы вытесняют проблемные старые классы java.util.Date/.Calendar. Новые классы вдохновлены очень успешной платформой Joda-Time , задуманной как ее преемник, похожей по концепции, но реструктурированной. Определено JSR 310 . Продлевался ThreeTen-Extra проекта. Смотрите учебник .
Имейте в виду, что java.time имеет разрешение наносекунды (9 десятичных знаков в доли секунды) по сравнению с миллисекундами разрешением (3 десятичных разряда) для java.util.Date и Joda-Time. Поэтому при форматировании для отображения только 3 десятичных разрядов вы можете скрывать данные.
Если вы хотите исключить какие-либо микросекунды или наносекунды из ваших данных, обрежьте их.
Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;
Классы java.time по умолчанию используют формат ISO 8601 при разборе / генерации строк. А Z
в конце это сокращение от Zulu
, и означает UTC .
An Instant
представляет момент на временной шкале в UTC с разрешением до наносекунд . Запись текущего момента в Java 8 ограничена миллисекундами , а новая реализация в Java 9 захватывает до наносекунд в зависимости от возможностей аппаратных часов вашего компьютера.
Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();
2016-05-06T23: 24: 25.694Z
Замените T
в середине пробел, а на Z
ничто, чтобы получить желаемый результат.
String output = instant.toString ().replace ( "T" , " " ).replace( "Z" , "" ; // Replace 'T', delete 'Z'. I recommend leaving the `Z` or any other such [offset-from-UTC][7] or [time zone][7] indicator to make the meaning clear, but your choice of course.
2016-05-06 23: 24: 25.694
Так как вам не нужно включать смещение или часовой пояс, сделайте «местное» время и дату, не привязанные к какой-либо конкретной местности.
String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );
Joda времени
Очень успешная библиотека Joda-Time была источником вдохновения для фреймворка java.time. Рекомендуется перейти на java.time, когда это удобно.
Формат ISO 8601 включает миллисекунды и является значением по умолчанию для библиотеки Joda-Time 2.4.
System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );
Когда беги…
Now: 2013-11-26T20:25:12.014Z
Кроме того, вы можете запросить доли секунды в миллисекундах в виде числа, если это необходимо:
int millisOfSecond = myDateTime.getMillisOfSecond ();