简短概述
Instant.now()
.toString()
2016-05-06T23:24:25.694Z
ZonedDateTime
.now
(
ZoneId.of( "America/Montreal" )
)
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " )
2016年5月6日19点24分25.694秒
java.time
在Java 8及以后的版本中,我们有内置于Java 8及以后版本的
java.time框架。这些新类取代了麻烦的旧的java.util.Date/.Calendar类。新类受到高度成功的
Joda-Time框架的启发,旨在成为其继承者,概念类似但重新架构。由
JSR 310定义。由
ThreeTen-Extra项目扩展。请参阅
Tutorial。
请注意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
广受欢迎的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 ();
java.util.Date
、java.util.Calendar
和java.text.SimpleTextFormat
这样的麻烦的旧日期时间类现在已经过时了,被java.time
类替换。请参阅Oracle的教程。 - Basil Bourque