在 Java 中将字符串转换为 OffsetDateTime

2022-09-04 02:22:18

我正在尝试转换字符串,但得到以下错误。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.

我真的很感激你能提供的任何帮助。

谢谢


答案 1

OffsetDateTime表示具有偏移量的日期时间,例如。

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

您尝试解析的文本不符合“请参阅 https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.htmlOffsetDateTime.

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

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

答案 2

谢谢大家的回复。早些时候,我使用joda datetime(看看下面的方法)来处理date和datetime,但我想使用Java8库而不是外部库。

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

我本来以为 OffsetDateTime 也是如此,但我们知道,如果我们想在某个时区使用某个时区的日期/时间,我们可以使用 ZonedDateTime 或 OffsetDateTime。由于我正在研究LocalDate可以提供帮助的时间段和持续时间。

字符串到日期时间:

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

本地日期为所需的字符串格式:

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