如何在YYYY-MM-DD中获取当前时间HH:MI:Sec.Millisecond格式在Java中?

Sun*_*hoo 600 java date

下面的代码给出了当前时间.但它没有告诉任何关于毫秒的事情.

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;
}
Run Code Online (Sandbox Code Playgroud)

我得到格式的日期2009-09-22 16:47:08 (YYYY-MM-DD HH:MI:Sec).

但我想以格式2009-09-22 16:47:08.128((YYYY-MM-DD HH:MI:Sec.Ms)检索当前时间- 其中128表示毫秒.

SimpleTextFormat会很好的.这里最低的时间单位是秒,但我如何获得毫秒?

小智 939

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Run Code Online (Sandbox Code Playgroud)

  • 在Java 8中,您可以使用[DateTimeFormatter](http://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)来实现相同的目的. (21认同)
  • @NickG这个`toString(String format)`方法在哪里?`java.util.Date`似乎没有它.你指的是Joda Time API吗?但是一个可能的好处是重用相同的格式化程序对象.另一个是您不必添加API - Date类是标准的Java库类. (9认同)
  • 使用Java 8 datetime API:`LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"))` (8认同)
  • SimpleDateFormat不是线程安全的,但较新的DateTimeFormatter是线程安全的. (7认同)

Jor*_*ram 194

Java one liner

public String getCurrentTimeStamp() {
    return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
}
Run Code Online (Sandbox Code Playgroud)

在JDK8风格

public String getCurrentLocalDateTimeStamp() {
    return LocalDateTime.now()
       .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
}
Run Code Online (Sandbox Code Playgroud)

  • 与SimpleDateFormat不同,LocalDateTime和DateTimeFormatter是线程安全的 (6认同)
  • @gaurav 这是你的cookie:https://www.callicoder.com/java-simpledateformat-thread-safety-issues/ (3认同)

Mic*_*rdt 100

您只需在日期格式字符串中添加毫秒字段:

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Run Code Online (Sandbox Code Playgroud)

SimpleDateFormatAPI文档详细描述了格式字符串.


dug*_*ggu 42

试试这个:-

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));
Run Code Online (Sandbox Code Playgroud)

要么

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));
Run Code Online (Sandbox Code Playgroud)


Bas*_*que 25

TL;博士

Instant.now()
       .toString()
Run Code Online (Sandbox Code Playgroud)

2016-05-06T23:24:25.694Z

ZonedDateTime.now( 
    ZoneId.of( "America/Montreal" ) 
).format(  DateTimeFormatter.ISO_LOCAL_DATE_TIME )
 .replace( "T" , " " )
Run Code Online (Sandbox Code Playgroud)

2016-05-06 19:24:25.694

java.time

在Java 8及更高版本中,我们在Java 8及更高版本中内置了java.time框架.这些新类取代了麻烦的旧java.util.Date/.Calendar类.新课程的灵感来自非常成功的Joda-Time框架,旨在作为其继承者,在概念上类似但重新设计.由JSR 310定义.由ThreeTen-Extra项目扩展.请参阅教程.

请注意,java.time能够达到纳秒分辨率(小数点后9位),相对于java.util.Date和Joda-Time 的毫秒分辨率(3位小数).因此,当格式化只显示3个小数位时,您可能隐藏数据.

如果要从数据中消除任何微秒或纳秒,请截断.

Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;
Run Code Online (Sandbox Code Playgroud)

在解析/生成字符串时,java.time类在默认情况下使用ISO 8601格式.最后的A Z是缩写Zulu,表示UTC.

An Instant表示UTC时间轴上的时刻,分辨率高达纳秒.捕获 Java 8中的当前时刻仅限于毫秒,Java 9中的新实现可捕获高达纳秒,具体取决于计算机的硬件时钟能力.

Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

2016-05-06 23:24:25.694

由于您不关心包含偏移量或时区,因此请将"本地"日期时间与任何特定位置无关.

String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );
Run Code Online (Sandbox Code Playgroud)

乔达时间

非常成功的Joda-Time库是java.time框架的灵感来源.建议在方便时迁移到java.time.

ISO 8601的格式包含毫秒,对于默认的乔达时间 2.4库.

System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );
Run Code Online (Sandbox Code Playgroud)

跑的时候......

Now: 2013-11-26T20:25:12.014Z
Run Code Online (Sandbox Code Playgroud)

此外,如果需要,您可以要求毫秒分数作为数字:

int millisOfSecond = myDateTime.getMillisOfSecond ();
Run Code Online (Sandbox Code Playgroud)


pri*_*ime 9

最简单的方法是(在Java 8之前)使用,

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Run Code Online (Sandbox Code Playgroud)

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"));
Run Code Online (Sandbox Code Playgroud)

有一点需要注意的是它是在受欢迎的第三方图书馆joda-time的帮助下开发的,

该项目由Joda-Time(Stephen Colebourne)和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
Run Code Online (Sandbox Code Playgroud)

如果你有一个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
Run Code Online (Sandbox Code Playgroud)

如果你刚刚有了纪元毫秒,

LocalDateTime date =
        LocalDateTime.ofInstant(Instant.ofEpochMilli(epochLongValue), ZoneId.systemDefault());
Run Code Online (Sandbox Code Playgroud)


小智 9

我这里有一个简单的例子,用毫秒显示日期和时间......

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class MyClass{

    public static void main(String[]args){
        LocalDateTime myObj = LocalDateTime.now();
        DateTimeFormatter myFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
        String forDate = myObj.format(myFormat);
        System.out.println("The Date and Time are: " + forDate);
    }
}
Run Code Online (Sandbox Code Playgroud)


Usa*_*oto 6

我会用这样的东西:

String.format("%tF %<tT.%<tL", dateTime);
Run Code Online (Sandbox Code Playgroud)

变量dateTime可以是任何日期和/或时间值,请参阅JavaDocFormatter.

  • 你不可以。字符“&lt;”表示使用前一个参数而不是下一个...... (2认同)