Java 8的新Date-Time API中是否有new Date().toString()
(来自Date
的{{1}})?
如果我执行以下操作:
java.util.Date
默认情况下,这给了我一个很好的可读结果:
2015年1月3日星期六12:58:46 CET 2015
(取决于区域设置)
在Java 8中(新方法,我知道上面的方法仍然有效)我看到以下方法“直接”获取日期字符串(没有额外的格式化):
System.out.println(new Date());
导致类似:
2015-01-03T12:03:58.614Z
这不是真正的可读性,需要一些额外的格式化。
另一种方式:
System.out.println(Clock.systemUTC().instant());
结果:
2015-01-03T13:00:58.594
这与上一个几乎相同,但最后没有时区Z.
因为所需的日期字符串也应该包含时区,所以我尝试了以下内容:
System.out.println(LocalDateTime.now());
打印:
2015-01-03T13:00:35.277 + 01:00 [欧洲/柏林]
也无法使用。
我知道我可以通过将System.out.println(ZonedDateTime.now());
的实例传递给DateTimeFormatter
的{{1}}方法,或者使用以下现有方法之一来轻松设置日期格式:
format()
打印出来:
星期六,2015年1月3日13:01:25 +0100
这对我来说是可以接受的。但它需要额外的格式化,这是我想要避免的。
那么,有没有办法在新的Java 8 Date-Time类中使用ZonedDateTime
来获得类似的东西?
答案 0 :(得分:2)
您需要使用格式化程序来复制java.util.Date
的格式。使用模式声明格式化程序:
private static final DateTimeFormatter FORMATTER =
DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy");
(建议使用static
常量)
然后使用ZonedDateTime
并使用以下方法中的一个对其进行格式化:
ZonedDateTime zdt = ZonedDateTime.now();
System.out.println(zdt.format(FORMATTER));
System.out.println(FORMATTER.format(zdt));
有关更多本地化格式,另请参阅DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)
。