Java 8 Date / Time API相当于'new Date()。toString()'

时间:2015-01-03 22:36:25

标签: java date java-time

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来获得类似的东西?

1 个答案:

答案 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)