提问人:user1351848 提问时间:9/13/2014 最后编辑:Jonikuser1351848 更新时间:1/5/2017 访问量:2183
ThreeTen 和解析 Instant
ThreeTen and parsing an Instant
问:
我正在使用 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 中表示年份)。为了计算基于周的年份,需要星期几,因此存在误差。
请注意,无法为您尝试创建的格式化程序提供字段。只有 ,或者可以。An 是一种特殊情况,必须使用 或类似方式进行格式化。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();
...然后将其传递给 instead。format()
由于两者都和 实现 ,这是接受的,因此代码的其余部分应按原样工作。Instant
LocalDateTime
TemporalAccessor
DateTimeFormatter.format()
评论