tl;dr
ZonedDateTime
.now( ZoneId.of( "America/Montreal" ) )
.format( DateTimeFormatter.ofPattern( "MMddHHmmss" ) )
java.time
现代方法是使用java.time类,它取代了旧的遗留日期时间类。
Instant
使用Instant
类获取当前UTC时刻。Instant
类表示时间线上的一个时刻,以UTC为基准,精度高达纳秒(小数点后可有九位数字)。
Instant instant = Instant.now(); // UTC
也许最好坚持使用 UTC。如果是这样,请将其转换为更灵活的 OffsetDateTime
进行格式化。指定 ZoneOffset.UTC
常量。
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
DateTimeFormatter
定义一个DateTimeFormatter
以满足您的格式要求。我不建议省略年份,但如果您坚持这样做,那么我们就开始吧。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMddHHmmss" );
使用该格式化程序创建一个字符串。
String output = odt.format( f );
ZonedDateTime
应用时区,从特定地区的挂钟时间角度查看同一时刻。
以大陆/地区
的格式指定正确的时区名称。永远不要使用3-4个字母的缩写,例如EST
或IST
,因为它们不是真正的时区,没有标准化,甚至不唯一(!)。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
使用
DateTimeFormatter
生成字符串,如上所示。
关于java.time
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧遗留日期时间类,例如java.util.Date
、.Calendar
和java.text.SimpleDateFormat
。
Joda-Time项目现在处于维护模式,建议迁移到java.time。
要了解更多信息,请查看Oracle教程。在Stack Overflow上搜索许多示例和解释。规范是JSR 310。
如何获取java.time类?
该
ThreeTen-Extra项目通过添加额外的类来扩展java.time。该项目是java.time可能未来新增内容的试验场。在这里,您可以找到一些有用的类,例如
Interval
,
YearWeek
,
YearQuarter
以及
更多。
Timestamp
,改用SimpleDateFormat
。 - Matt Ball