我正在使用ThreeTen并尝试格式化Instant。分开它会更容易,但我很好奇,这应该有效吗?从我读过的所有内容中,Instant应该是可解析的,并且包含模式的所有组件:
@Test
public void testInstants() {
Instant instant = Instant.now();
String dbDatePattern = "YYYY-MM-dd HH:mm:ss.SSS";
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dbDatePattern);
String dbDate = formatter.format(instant);
} catch (Exception ex) {
int dosomething = 1;
}
}
错误:org.threeten.bp.temporal.UnsupportedTemporalTypeException:不支持的字段:DayOfWeek
dd是DayofWeek的月份日。可能会被扔红鲱鱼,但看起来很奇怪。
答案 0 :(得分:3)
模式字母" Y"是指在ThreeTen-Backport和JSR-310中的基于周的年份(它意味着Joda-Time的年代)。为了计算以周为基础的年份,需要星期几,因此错误。
请注意,Instant
无法为您尝试创建的格式化程序提供字段。只有ZonedDateTime
,LocalDateTime
或OffsetDateTime
才能。 Instant
是一种特殊情况,必须使用DateTimeFormatter.ISO_INSTANT
或类似格式进行格式化。
答案 1 :(得分:1)
明确JodaStephen的回答:
String dbDatePattern = "YYYY-MM-dd HH:mm:ss.SSS";
(大写YYYY)
应该是
String dbDatePattern = "yyyy-MM-dd HH:mm:ss.SSS";
(小写yyyy)
代替。
此外,而不是
Instant instant = Instant.now();
DO
LocalDateTime localDateTime = LocalDateTime.now();
...然后将其传递给format()
。
由于Instant
和LocalDateTime
都实现了TemporalAccessor
DateTimeFormatter.format()
接受的内容,因此其余代码应按原样运行。