我正在使用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是一个月中的某一天,而不是一周中的某几天。可能会被人转移注意力,但这似乎很奇怪。
模式字母"Y"在ThreeTen Backport和JSR-310中表示基于周的年份(在Joda Time中表示时代的年份)。为了计算基于星期的年份,需要星期几,因此会出现错误。
请注意,Instant
无法为要创建的格式化程序提供字段。只有ZonedDateTime
、LocalDateTime
或OffsetDateTime
可以。Instant
是一种特殊情况,必须使用DateTimeFormatter.ISO_INSTANT
或类似方法进行格式化。
要明确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();
进行
LocalDateTime localDateTime = LocalDateTime.now();
然后将其传递给CCD_ 11。
由于Instant
和LocalDateTime
都实现了TemporalAccessor
,这也是DateTimeFormatter.format()
所接受的,所以代码的其余部分应该按原样工作。