Как получить текущее время в формате YYYY-MM-DD HH: MI: Sec.Millisecond в Java?

Следующий код дает мне текущее время. Но ничего не говорится о миллисекундах.

public static String getCurrentTimeStamp() { SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//dd/MM/yyyy Date now = new Date(); String strDate = sdfDate.format(now); return strDate; } 

Я получаю дату в формате 2009-09-22 16:47:08 (ГГГГ-ММ-ДД ЧЧ: МИ: сек) .

Но я хочу получить текущее время в формате 2009-09-22 16:47:08.128 ((YYYY-MM-DD HH: MI: Sec.Ms) – где 128 сообщает миллисекунду.

SimpleTextFormat будет работать нормально. Здесь самая низкая единица времени – вторая, но как я могу получить миллисекунду?

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

Java-лайнер

 public String getCurrentTimeStamp() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()); } 

в стиле JDK8

 public String getCurrentLocalDateTimeStamp() { return LocalDateTime.now() .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")); } 

Вам нужно добавить только поле миллисекунды в строку формата даты:

 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

API-документ SimpleDateFormat подробно описывает строку формата.

попробуй это:-

http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

 DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); Date date = new Date(); System.out.println(dateFormat.format(date)); 

или

 DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Calendar cal = Calendar.getInstance(); System.out.println(dateFormat.format(cal.getTime())); 

ТЛ; др

 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 и более поздние версии . Эти новые classы вытесняют неприятные старые classы java.util.Date/.Calendar. Новые classы вдохновлены очень успешной структурой 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 по умолчанию при parsingе / генерации строк. 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 времени

Очень успешная библиотека Joda-Time стала вдохновением для frameworks 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 (); 

В дополнение к приведенным выше ответам, здесь представлен небольшой рабочий пример программы, которая печатает текущее время и дату, включая миллисекунды.

 import java.text.SimpleDateFormat; import java.util.Date; public class test { public static void main(String argv[]){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); Date now = new Date(); String strDate = sdf.format(now); System.out.println(strDate); } } 

Я бы использовал что-то вроде этого:

 String.format("%tF % 

Переменная dateTime может быть любой датой и / или значением времени, см. JavaDoc для Formatter .

Самый простой способ – (до Java 8) использовать,

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

Но SimpleDateFormat не является streamобезопасным. Ни java.util.Date . Это приведет к возникновению проблем с параллельным доступом для пользователей. И в этих существующих проектах много проблем. Чтобы преодолеть их сейчас на Java 8, мы имеем отдельный пакет java.time . Этот документ Java SE 8 Date and Time имеет хороший обзор об этом.

Поэтому в Java 8 что-то вроде ниже будет делать трюк (для форматирования текущей даты / времени),

 LocalDateTime.now() .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")); 

И еще одно замечание: оно было разработано с помощью популярной сторонней библиотеки joda-time ,

Проект был совместно разработан автором Joda-Time (Stephen Colebourne) и Oracle под JSR 310 и появится в новом пакете Java SE 8 java.time.

Но теперь время joda-time становится устаревшим и просит пользователей перейти на новый java.time .

Обратите внимание, что с Java SE 8 и далее пользователям предлагается перейти на java.time (JSR-310) – основную часть JDK, которая заменяет этот проект

В любом случае, сказав это,

Если у вас есть экземпляр календаря, вы можете использовать ниже, чтобы преобразовать его в новое java.time ,

  Calendar calendar = Calendar.getInstance(); long longValue = calendar.getTimeInMillis(); LocalDateTime date = LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault()); String formattedString = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")); System.out.println(date.toString()); // 2018-03-06T15:56:53.634 System.out.println(formattedString); // 2018-03-06 15:56:53.634 

Если у вас есть объект Date,

  Date date = new Date(); long longValue2 = date.getTime(); LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue2), ZoneId.systemDefault()); String formattedString = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")); System.out.println(dateTime.toString()); // 2018-03-06T15:59:30.278 System.out.println(formattedString); // 2018-03-06 15:59:30.278 

Если бы у вас была эпоха миллисекунд,

 LocalDateTime date = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochLongValue), ZoneId.systemDefault()); 

Вы можете просто получить его в нужном формате.

 String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date())); 

Документ в Java 8 называет его долей секунды , а в Java 6 – миллисекундой . Это привело меня в замешательство

  • Темы и записи файлов
  • Исключение, отличное от RuntimeException
  • Java - удаление первого символа строки
  • Вычислить дни между двумя датами в Java 8
  • Локарифмическая привязка этикеток / тиков
  • Объяснение обобщенного <T extends Comparable > в коллекции.sort / сопоставимый код?
  • как читать переменную системной среды в Spring applicationContext
  • Перечисление Java и дополнительные файлы classов
  • JavaFX: «Инструментарий» не инициализируется при попытке воспроизведения mp3-файла с помощью classа MediaPlayer
  • Отображение изображения в Java Swing
  • Включая все банки в каталог в пути Java classpath
  • Interesting Posts

    Является ли тестирование единиц стоимостью усилий?

    Ограничение 2 исходящих VPN-соединений любого типа из Windows 8.1 – как увеличить лимит?

    iPhone / iPad Обфускация кода приложения – это возможно? Стоило того?

    Regex: как получить слова из строки (C #)

    Защита CSRF: нужно ли нам генерировать токен для каждой формы?

    Почему внутренние classы делают доступными частные методы?

    Как полностью удалить диалоговое окно закрытия

    Подключение к удаленному рабочему столу игнорирует сохраненные учетные данные

    Android: как проверить, запущена ли работа?

    В чем смысл кода исключения «EXC_I386_GPFLT»?

    Вызов метода child из родительского

    MySQL. Выбор столбца не в группе.

    Как сделать jQuery Содержит регистр без учета регистра, в том числе jQuery 1.8+?

    В чем разница между реализацией и компиляцией в Gradle?

    Аппарат Windows 7 автоматически запускается при подключении к источнику питания

    Давайте будем гением компьютера.