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 框架,该框架旨在作为其继任者,在概念上相似但经过重新架构。由JSR 310 定义。由ThreeTen-Extra 项目扩展。请参阅Tutorial。
请注意,java.time 具有 nanosecond 分辨率(9 位小数,秒的分数),而 java.util.Date 和 Joda-Time 的 millisecond 分辨率(3 位小数)。因此,当格式化为仅显示 3 位小数时,您可能会隐藏数据。
如果您想从数据中消除任何微秒或纳秒,请截断。
Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;
java.time 类在解析/生成字符串时默认使用ISO 8601 格式。末尾的Z 是Zulu 的缩写,意思是UTC。
Instant 代表 UTC 时间线上的一个时刻,分辨率高达 nanoseconds。 Java 8 中的 Capturing the current moment 仅限于 milliseconds,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 ();