如何在Java中以YYYY-MM-DD HH:MI:秒毫秒格式获取当前时间?

为君一笑 提交于 2020-01-06 14:26:35

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

下面的代码为我提供了当前时间。 但这并不能说明毫秒。

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 (YYYY-MM-DD HH:MI:Sec)的格式获取日期。

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

SimpleTextFormat将正常工作。 在这里,最小的时间单位是秒,但是如何获得毫秒呢?


#1楼

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

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

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


#2楼

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

#3楼

尝试这个:-

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

#4楼

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

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

解析/生成字符串时,java.time类默认使用ISO 8601格式。 末尾的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库是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 ();

#5楼

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"));
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!