如何在YYYY-MM-DD中获取当前时间HH:MI: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 (YYYY-MM-DD HH:MI:Sec)获得date。

但我想以2009-09-22 16:47:08.128 ((YYYY-MM-DD HH:MI:Sec.Ms))格式检索当前时间。

128表示毫秒。

SimpleTextFormat将正常工作。 这里最低的时间单位是秒,但是我怎样才能得到毫秒呢?

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

Java一个class轮

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

您只需要在date格式string中添加毫秒字段:

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

SimpleDateFormat的API文档详细描述了格式string。

尝试这个:-

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;博士

 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框架,其目标是作为其后继者,在概念上相似但重新devise。 由JSR 310定义。 由ThreeTen-Extra项目扩展。 参见教程 。

请注意,java.time能够以毫微秒的分辨率(小数点后9位小数)与java.util.Date&Joda-Time的毫秒分辨率(小数点后三位)。 所以当格式化显示只有3位小数,你可以隐藏数据。

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

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

parsing/生成string时,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

在中间用空格replaceT ,用空格replaceZ ,得到你想要的结果。

 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

由于您不关心包含偏移量或时区,请设置与任何特定地点无关的“本地”date时间。

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

为了补充上面的答案,下面是一个打印当前时间和date(包括毫秒)的程序的小例子。

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

variablesdateTime可以是任何date和/或时间值,请参阅JavaDoc for Formatter

你可以简单地以你想要的格式来获得它。

 String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date()));