我有这个代码可以生成日期和时间,
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字段的lib,我可以使用它来获取日期,小时和分钟?
Chrono字段不提取完整日期。
答案 0 :(得分:3)
由于您似乎对如何从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
请查看文档以了解更多方法,包括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
附加到String
时隐式调用)会抓取JVM的时区设置,并在{{1}时使用它来生成String
保持不受影响。
在特殊情况下,您只需要Date
表示现在的日期时间,再次,除非您有非常具体的需求,否则它是不明智的,这很简单:
Date
结果与上述相同。
答案 1 :(得分:2)
ZonedDateTime
包含getHour()
,getMinute()
等方法,应该足够了。