Java 8 的 new 中是否有与 new Date().toString()
等效的函数(Date
from java.util.Date
)日期时间 API?
如果我执行以下操作:
System.out.println(new Date());
默认情况下,这会给我一个很好的可读结果,如下所示:
Sat Jan 03 12:58:46 CET 2015
(稍微取决于语言环境)
在Java 8中(新方法,我知道上面的方法仍然有效)我看到以下方法“直接”获取日期字符串(无需额外的格式化):
System.out.println(Clock.systemUTC().instant());
结果如下:
2015-01-03T12:03:58.614Z
这不是真正可读的,需要一些额外的格式。
另一种方式:
System.out.println(LocalDateTime.now());
结果:
2015-01-03T13:00:58.594
这与上一个几乎相同,但末尾没有时区 Z。
因为所需的日期字符串还应该包含时区,所以我尝试了以下操作:
System.out.println(ZonedDateTime.now());
打印:
2015-01-03T13:00:35.277+01:00[Europe/Berlin]
这也是无法使用的。
我知道我可以通过将 DateTimeFormatter
实例传递给 ZonedDateTime
的 format()
方法或使用现有的之一是这样的:
System.out.println(ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME));
打印输出:
Sat, 3 Jan 2015 13:01:25 +0100
这样的结果对我来说是可以接受的。但它需要额外的格式,这是我想避免的。
那么,有没有一种方法可以通过新的 Java 8 Date-Time 类获得与 new Date().toString()
类似的东西(如果不等价的话)?
最佳答案
您需要使用格式化程序来复制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)
了解更多本地化格式。
关于Java 8 日期/时间 API 相当于 'new Date().toString()',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27760280/