Как получить текущее время в YYYY-MM-DD HH:MI:SEC миллисекундном формате на 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 ((гггг-ММ-ДД HH:MI:Sec.Ms) - где 128 говорит миллисекунду.
SimpleTextFormat будет работать нормально. Здесь самая низкая единица времени-вторая,но как мне получить миллисекунду?
10 ответов:
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 doc из 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()));
tl; dr
Instant.now() .toString()2016-05-06T23:24: 25.694 Z
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ).format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) .replace( "T" , " " )2016-05-06 19:24:25.694
java.время
в Java 8 и позже, у нас есть java.время фреймворк, встроенный в Java 8 и более поздние версии. Эти новые классы вытесняют беспокойную старую java.утиль.Дата./Календарь занятий. Новые классы вдохновлены очень успешным Joda-Time рамки, предназначенные как его преемник, похожий по концепции, но перестроенный. Определяется JSR 310. Расширяется за счет ThreeTen-Extra. Смотрите учебник.
имейте в виду, что java.время способно НС разрешение (9 десятичных знаков в долях секунды), по сравнению с МС разрешение (3 десятичных знака) обоих java.утиль.Дата И Джода-Время. Поэтому при форматировании для отображения только 3 десятичных знаков вы можете скрывайте данные.
если вы хотите исключить любые микросекунды или наносекунды из ваших данных, усеките.
Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;java.время классы используют 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.694 Z
заменить
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.временные рамки. Рекомендуется перейти на java.время, когда удобно.
The 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 %<tT.%<tL", dateTime);переменная
dateTimeможет быть любое значение даты и / или времени, см. JavaDoc дляFormatter.
самый простой способ был (до Java 8) использовать,
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");но SimpleDateFormat не является потокобезопасным. Ни то, ни другое java.утиль.Дата. Это приведет к потенциальным проблемам параллелизма для пользователей. И есть много проблем в существующих конструкциях. Чтобы преодолеть эти в Java 8 у нас есть отдельный пакет под названием java.время. Это Java SE 8 дата и время документ имеет хороший обзор о оно.
так что в Java 8 что-то вроде ниже будет делать трюк (для форматирования текущей даты/времени),
LocalDateTime.now() .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));и еще одна вещь, чтобы отметить, он был разработан с помощью популярной сторонней библиотеки Joda времени,
проект был проведен совместно автором Joda-Time (Stephen Colebourne) и Oracle, под JSR 310, и появится в новом пакете Java SE 8 java.время.
а теперь
joda-timeis становится устаревшим и попросил пользователей перейти на новый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 называет его доля в секунду!--2-->, в то время как в Java 6 был назван МС. Это привело меня в замешательство
Comments