Java 8 日期/时间 API 相当于 'new Date().toString()'

标签 java date java-time

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 实例传递给 ZonedDateTimeformat() 方法或使用现有的之一是这样的:

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/

相关文章:

java - Apache Mina,创建我自己的 IoSession : How to?

javascript - 使用 moment timezone js 将日期字符串转换为带时区的日期

java - 按多个日期字段对类进行排序

java - 解析 ZonedDateTime.parse 忽略偏移量

java - Java 8 的日期时间包 DayOfWeek 枚举的顺序

Java:尝试将可比较数组转换为整数数组时出错

java - 在 Databricks 作业集群上安装 Maven 包

java - 在数据集上调用 withColumn 的成本是多少

php - 如何在 php 中使电子邮件链接在 X 分钟后过期?

java - 使用 java 中的 Formatter 类格式化日期和时间