Как получить текущее время в формате гггг-ММ-ДД чч:мм:сек. МС формат в 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
((гггг-ММ-ДД чч:Ми:сек.МС)- где 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 Времени рамки, предназначенные как его преемник, похожий по концепции, но перестроенный. Определяется JSR 310. Расширено ThreeTen-Extra. Вижу учебник.
имейте в виду, что java.время способно на НС разрешение (9 десятичных знаков в доли секунды), по сравнению с МС разрешение (3 десятичных знака) обоих java.утиль.Date & Joda-Время. Поэтому при форматировании для отображения только 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.время, когда удобно.
на ISO 8601 формат включает миллисекунды и является значением по умолчанию для Joda Времени 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-time
is становится устаревшим и просит пользователей перейти на new 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 был назван МС. Это привело меня в замешательство