gpt4 book ai didi

java - 从 Instant.now() 生成的日期中提取日期、小时和分钟

转载 作者:行者123 更新时间:2023-12-01 06:49:19 24 4
gpt4 key购买 nike

我有这段代码可以生成日期和时间,

ZoneId z = ZoneId.of( "Africa/Nairobi" );
Instant instant = Instant.now();
ZonedDateTime zdt = instant.atZone(z);
return zdt.toString();

//2018-03-19T09:03:22.858+03:00[Africa/Nairobi]

有没有像 chrono - https://docs.oracle.com/javase/8/docs/api/java/time/temporal/ChronoField.html 这样的库我可以使用该字段来获取日期、小时和分钟?

Chrono 字段不会提取完整的日期。

最佳答案

由于您似乎对如何从 ZonedDateTime 获取日期感到困惑,我想补充一下 Claudiu Guja’a good and correct answer .

    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

请查看文档以了解更多方法,包括获取月份数(1 到 12)的 getMonthValue。我在底部添加了一个链接。由于 ZonedDateTime 类具有 now 方法,因此您不需要首先使用 Instant.now()

如果您想要一个老式的 java.util.Date 对象 - 第一个答案是:不需要。您已经使用的现代 API 更易于使用。仅当您需要某个无法更改或不想立即更改的旧 API 的 Date 时,获取 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 附加到 String 时隐式调用)获取 JVM 的时区设置并使用它来生成 StringDate 不受影响。

在特殊情况下,您现在只需要一个代表日期时间的 Date ,除非您有非常具体的需求,否则这是不明智的,这非常简单:

    Date oldfashionedDateObject = new Date();

结果与上面相同。

链接

关于java - 从 Instant.now() 生成的日期中提取日期、小时和分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49357170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com