Как получить текущее время в формате гггг-ММ-ДД чч:мм:сек. МС формат в 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 ответов


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 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 был назван МС. Это привело меня в замешательство