我想在解析数组列表的元素后将其转换为ZonedDateTime
对象。字符串如下所示。
"2017-02-12 06:59:00 +1300"
此刻,我使用DateTimeFormatter
:
DateTimeFormatter dateTimeFormatter =
DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss ZZ");
并尝试使用parse
来获取时间:
this.actionTime = dateTimeFormatter.parse(actionTime, ZonedDateTime::from);
请参见以下方法:
public DateCalculatorTest(String actionTime, int expectedDayOfWeek) {
DateTimeFormatter dateTimeFormatter =
DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss ZZ");
DateTimeFormatter localTimeFormatter =
DateTimeFormatter.ofPattern("YYYY-MM-dd");
this.actionTime = dateTimeFormatter.parse(actionTime, ZonedDateTime::from);
this.expectedDayOfWeek = expectedDayOfWeek;
}
但是,我无法解析该字符串。我收到以下错误:
Text '2017-02-12 06:59:00 +1300' could not be parsed: Unable to obtain ZonedDateTime from TemporalAccessor: {WeekBasedYear[WeekFields[SUNDAY,1]]=2017, DayOfMonth=12, MonthOfYear=2, OffsetSeconds=46800},ISO resolved to 06:59 of type java.time.format.Parsed
是否可以使用java.time
来做到这一点?
答案 0 :(得分:3)
在DateFormator年中应将小写字母替换为
YYYY-MM-dd HH:mm:ss ZZ
使用
yyyy-MM-dd HH:mm:ss ZZ
您不需要两个ZZ单就足够了。在您的代码中,ZoneId实例将为您提供默认的ZoneId,它将回退到LocalDateTime。如果要指定ZoneId,请按以下步骤使用
this.actionTime = ZonedDateTime.parse(actionTime, dateTimeFormatter.withZone(ZoneId.of(<<yourxoneid>>)));
答案 1 :(得分:2)
我设法使用以下方法解决此问题:
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss ZZ");
DateTimeFormatter localTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
this.symbol = symbol;
this.actionTime = ZonedDateTime.parse(actionTime, dateTimeFormatter);
this.actionDate = LocalDate.parse(expectedResult, localTimeFormatter);