从 Instant.now() 生成的日期中提取日期、小时和分钟
Extracting date, hour and minute from Instant.now() generated date
我有生成日期和时间的代码,
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 字段这样的库可以用来获取日期、小时和分钟?
计时字段未提取完整日期。
ZonedDateTime
有getHour()
、getMinute()
等方法,应该够用了。
既然你对如何从你的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)。我在底部添加了一个 link。由于ZonedDateTime
class有一个now
方法,所以你不需要先Instant.now()
。
如果你想要一个 old-fashioned 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
附加到 String
时隐式调用)获取 JVM 的时区设置并使用它来生成 String
而 Date
不受影响。
在特殊情况下,您现在只需要 Date
代表 date-time,同样,它是 ill-advised,除非您有非常具体的需求,这非常简单:
Date oldfashionedDateObject = new Date();
结果同上
链接
我有生成日期和时间的代码,
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 字段这样的库可以用来获取日期、小时和分钟?
计时字段未提取完整日期。
ZonedDateTime
有getHour()
、getMinute()
等方法,应该够用了。
既然你对如何从你的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)。我在底部添加了一个 link。由于ZonedDateTime
class有一个now
方法,所以你不需要先Instant.now()
。
如果你想要一个 old-fashioned 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
附加到 String
时隐式调用)获取 JVM 的时区设置并使用它来生成 String
而 Date
不受影响。
在特殊情况下,您现在只需要 Date
代表 date-time,同样,它是 ill-advised,除非您有非常具体的需求,这非常简单:
Date oldfashionedDateObject = new Date();
结果同上