将 java.time 转换为日历
Converting java.time to Calendar
从 java.time.Instant
或 java.time.ZonedDateTime
获取 Calendar
对象的最简单方法是什么?
如果您知道 GregorianCalendar#from(ZonedDateTime)
method. There was a discussion in Threeten-dev mail group 存在 Calendar
,那么从 ZonedDateTime
立即获取 Calendar
是非常简单的,关于为什么 Calendar
中没有该方法class。虽然不是很深入的讨论。
但是,没有直接的方法可以将 Instant
转换为 Calendar
。你必须有一个中间状态:
Instant instant = Instant.now();
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
Calendar cal1 = GregorianCalendar.from(zdt);
这可能是因为,从 this oracle tutorial 上的 table 可以看出,Instant
映射到 Date
而不是 Calendar
。同样,ZonedDateTime
映射到 Calendar
.
GregorianCalendar.from(ZonedDateTime.ofInstant(instant, zoneId))
怎么样?
您需要使用即时获取时区,然后才能获取日历。
Calendar myCalendar = GregorianCalendar.from(ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()));
从 java.time.Instant
或 java.time.ZonedDateTime
获取 Calendar
对象的最简单方法是什么?
如果您知道 GregorianCalendar#from(ZonedDateTime)
method. There was a discussion in Threeten-dev mail group 存在 Calendar
,那么从 ZonedDateTime
立即获取 Calendar
是非常简单的,关于为什么 Calendar
中没有该方法class。虽然不是很深入的讨论。
但是,没有直接的方法可以将 Instant
转换为 Calendar
。你必须有一个中间状态:
Instant instant = Instant.now();
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
Calendar cal1 = GregorianCalendar.from(zdt);
这可能是因为,从 this oracle tutorial 上的 table 可以看出,Instant
映射到 Date
而不是 Calendar
。同样,ZonedDateTime
映射到 Calendar
.
GregorianCalendar.from(ZonedDateTime.ofInstant(instant, zoneId))
怎么样?
您需要使用即时获取时区,然后才能获取日历。
Calendar myCalendar = GregorianCalendar.from(ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()));