由于您似乎对如何从您的日期获取日期感到困惑ZonedDateTime
,我想补充克劳迪乌古贾一个好的和正确的答案。
ZoneId z = ZoneId.of("Africa/Nairobi");
ZonedDateTime zdt = ZonedDateTime.now(z);
System.out.println("Date " + zdt.toLocalDate());
System.out.println("Year " + zdt.getYear());
System.out.println("Month " + zdt.getMonth());
System.out.println("Day of month " + zdt.getDayOfMonth());
这刚刚打印:
Date 2018-03-19
Year 2018
Month MARCH
Day of month 19
请查看文档以获取更多方法,包括getMonthValue
月份数(1 到 12)。我在底部包含一个链接。由于ZonedDateTime
类有一个now
方法,你不需要Instant.now()
先。
如果你想要一个老式的java.util.Date
对象——第一个答案是:不要。您已经在使用的现代 API 更易于使用。仅当您需要Date
一些无法更改或现在不想更改的遗留 API 时,获取Instant
并转换它:
Instant instant = Instant.now();
Date oldfashionedDateObject = Date.from(instant);
System.out.println("Old-fashioned java.util.Date " + oldfashionedDateObject);
这打印:
Old-fashioned java.util.Date Mon Mar 19 12:00:05 CET 2018
即使它CET
在字符串中表示中欧时间,Date
但不包含时区(这让很多人感到困惑)。只有它的toString
方法(当我附加Date
到 a时隐式调用String
)获取 JVM 的时区设置并使用它来生成不受影响String
的时间。Date
在您现在只想要一个Date
代表日期时间的特殊情况下,除非您有非常特殊的需要,否则它是不明智的,它非常简单:
Date oldfashionedDateObject = new Date();
结果与上述相同。
链接