How to get the current time in YYYY-MM-DD HH:MI:Sec.Millisecond format in Java?

后端 未结 15 2202
不思量自难忘°
不思量自难忘° 2020-11-22 15:05

The code below gives me the current time. But it does not tell anything about milliseconds.

public static String getCurrentTimeStamp() {
    SimpleDateForm         


        
15条回答
  •  无人及你
    2020-11-22 15:24

    tl;dr

    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

    In Java 8 and later, we have the java.time framework built into Java 8 and later. These new classes supplant the troublesome old java.util.Date/.Calendar classes. The new classes are inspired by the highly successful Joda-Time framework, intended as its successor, similar in concept but re-architected. Defined by JSR 310. Extended by the ThreeTen-Extra project. See the Tutorial.

    Be aware that java.time is capable of nanosecond resolution (9 decimal places in fraction of second), versus the millisecond resolution (3 decimal places) of both java.util.Date & Joda-Time. So when formatting to display only 3 decimal places, you could be hiding data.

    If you want to eliminate any microseconds or nanoseconds from your data, truncate.

    Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;
    

    The java.time classes use ISO 8601 format by default when parsing/generating strings. A Z at the end is short for Zulu, and means UTC.

    An Instant represents a moment on the timeline in UTC with resolution of up to nanoseconds. Capturing the current moment in Java 8 is limited to milliseconds, with a new implementation in Java 9 capturing up to nanoseconds depending on your computer’s hardware clock’s abilities.

    Instant instant = Instant.now (); // Current date-time in UTC.
    String output = instant.toString ();
    

    2016-05-06T23:24:25.694Z

    Replace the T in the middle with a space, and the Z with nothing, to get your desired output.

    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

    As you don't care about including the offset or time zone, make a "local" date-time unrelated to any particular locality.

    String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );
    

    Joda-Time

    The highly successful Joda-Time library was the inspiration for the java.time framework. Advisable to migrate to java.time when convenient.

    The ISO 8601 format includes milliseconds, and is the default for the Joda-Time 2.4 library.

    System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );
    

    When run…

    Now: 2013-11-26T20:25:12.014Z
    

    Also, you can ask for the milliseconds fraction-of-a-second as a number, if needed:

    int millisOfSecond = myDateTime.getMillisOfSecond ();
    

提交回复
热议问题