ТЛ; др
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 при разборе / генерации строк. A Z
в конце сокращенно означает Zulu
и означает UTC .
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-Time
Очень успешная библиотека 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 ();