在Java中将字符串转换为OffsetDateTime

时间:2017-06-01 03:19:57

标签: java string date datetime java-8

我正在尝试转换OffsetDateTime中的字符串,但会低于错误。

java.time.format.DateTimeParseException: Text '20150101' could not be parsed: Unable to obtain OffsetDateTime from TemporalAccessor: {},ISO resolved to 2015-01-01 of type java.time.format.Parsed

代码:OffsetDateTime.parse("20150101", DateTimeFormatter.ofPattern("yyyyMMdd"));

预期输出:OffsetDateTime object with date 20150101.

我非常感谢您提供的任何帮助。

谢谢,

3 个答案:

答案 0 :(得分:6)

OffsetDateTime表示带偏移的日期时间,例如。

  

2007-12-03T10:15:30 + 01:00

您尝试解析的文字不符合OffsetDateTime.的要求 见https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html

正在解析的字符串既不包含ZoneOffset也不包含时间。从字符串和格式化程序的模式,看起来你只需要一个LocalDate。所以,你可以使用:

LocalDate.parse("20150101", DateTimeFormatter.ofPattern("yyyyMMdd"));

答案 1 :(得分:2)

对于您的案例使用LocalDate而不是offsetDatetime,因为您只想解析日期(没有时间/偏移)。对offsetDatetime的使用进行了很好的讨论here

答案 2 :(得分:1)

感谢大家的回复。 之前我使用joda datetime(查看下面的方法)来处理日期和日期时间,但我想使用Java8库而不是外部库。

static public DateTime convertStringInDateFormat(String date, String dateFormat){
    DateTimeFormatter formatter = DateTimeFormat.forPattern(dateFormat);
return formatter.parseDateTime(date);
}

我期待与OffsetDateTime相同,但是如果我们想要在某个时区使用日期/时间,我们就知道我们可以使用ZonedDateTime或OffsetDateTime。 正在处理LocalDate可以帮助的时间段和持续时间。

String to DateTime:

LocalDate date =
LocalDate.parse("20150101", DateTimeFormatter.ofPattern("yyyyMMdd"));

LocalDate为所需的字符串格式:

String dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'";
date.atStartOfDay().format(DateTimeFormatter.ofPattern(dateFormat));