Как получить текущее время в формате ГГГГ-ММ-ДД ЧЧ: МИ: Миллисекунда в Яве? - PullRequest
565 голосов
/ 22 сентября 2009

Код ниже дает мне текущее время. Но это ничего не говорит о миллисекундах.

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 (ГГГГ-ММ-ДД ЧЧ: MI: сек) .

Но я хочу получить текущее время в формате 2009-09-22 16:47:08.128 ((ГГГГ-ММ-ДД ЧЧ: MI: Sec.Ms) - где 128 показывает миллисекунду.

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

Ответы [ 12 ]

880 голосов
/ 22 сентября 2009
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
184 голосов
/ 19 декабря 2013

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"));
}
98 голосов
/ 22 сентября 2009

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

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

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

41 голосов
/ 07 октября 2013

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

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()));
25 голосов
/ 27 ноября 2013

ТЛ; др

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

Очень успешная библиотека Joda-Time была источником вдохновения для фреймворка 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 ();
9 голосов
/ 06 марта 2018

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

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

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

Так что в Java 8 что-то похожее ниже поможет (форматировать текущую дату / время),

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

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

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

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

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

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

Если у вас есть экземпляр Calendar , вы можете использовать его ниже, чтобы преобразовать его в новый 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());
6 голосов
/ 30 мая 2017

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

String.format("%tF %<tT.%<tL", dateTime);

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

4 голосов
/ 17 октября 2016

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

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);
    }
}

0 голосов
/ 18 апреля 2019

Я не вижу ссылки на это:

SimpleDateFormat f = new SimpleDateFormat("yyyyMMddHHmmssSSS");

вышеуказанный формат также полезен.

http://www.java2s.com/Tutorials/Java/Date/Date_Format/Format_date_in_yyyyMMddHHmmssSSS_format_in_Java.htm

0 голосов
/ 16 ноября 2018

Используйте это, чтобы получить текущее время в указанном формате:

 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 System.out.print(dateFormat.format(System.currentTimeMillis()));  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...