Как включить миллисекунды в форматированную строку даты? - PullRequest
9 голосов
/ 01 сентября 2011

Привет, я кодирую следующее:

String sph=(String) android.text.format.DateFormat.format("yyyy-MM-dd_hh-mm-ss_SSS", new java.util.Date()); 

Я хочу текущие дату и время и миллисекунды

что это мне дает:

2011-09-01_09-55-03-SSS

SSS не преобразует обратно в миллисекунды ...

Кто-нибудь знает, почему и как должно быть, чтобы миллисекунды заняли 3 позиции?

Спасибо

Ответы [ 3 ]

16 голосов
/ 01 сентября 2011

Используйте следующее:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss_SSS");
String dateString = formatter.format(new java.util.Date());
2 голосов
/ 14 августа 2016

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?

  • Java SE 8 , Java SE 9 , Java SE 10, Java SE 11 и более поздние версии - часть стандартного Java API с связанной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и JavaSE 7
    • Большая часть функций java.time перенесена на Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии пакетов Android для реализации java.time классы.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше).См. Как использовать ThreeTenABP… .
0 голосов
/ 01 сентября 2011

Попробуйте использовать тот же формат с SimpleDateFormat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...