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
末尾的A Zulu
表示UTC。
An Instant
代表UTC时间线上的一个时刻,分辨率最高为ns。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的格式包含毫秒,对于默认的乔达时间 2.4库。
System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );
运行时...
Now: 2013-11-26T20:25:12.014Z
另外,如果需要,您可以要求毫秒的毫秒数作为数字:
int millisOfSecond = myDateTime.getMillisOfSecond ();