Как получить текущее время в формате 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 сообщает миллисекунду.
- Миграция с JSF 1.2 на JSF 2.0
- pattern.matcher () vs pattern.matches ()
- В чем разница между кванторами регулярного выражения `Greedy` и` Reuctant`?
- Почему, когда конструктор аннотируется с помощью @JsonCreator, его аргументы должны быть аннотированы с помощью @JsonProperty?
- Необязательный orElse Необязательный в Java
SimpleTextFormat
будет работать нормально. Здесь самая низкая единица времени – вторая, но как я могу получить миллисекунду?
- Можно ли вызвать абстрактный метод из конструктора в Java?
- Java округление до int с использованием Math.ceil
- Java Inheritance - вызов метода суперclassа
- Java: проверка, является ли бит 0 или 1 в длинном
- Нет провайдера Persistence для EntityManager с именем X
- Простой способ повторить строку в java
- Struts 2: для пространства имен не отображается действие
- Ява-выражение Java 8 и значения первого classа
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 – миллисекундой . Это привело меня в замешательство