在 Java 中将字符串转换为 OffsetDateTime

新手上路,请多包涵

我正在尝试转换 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.

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

谢谢,

原文由 Shashwat Shekhar Shukla 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

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

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

我期待与 OffsetDateTime 相同,但我知道如果我们想在某个时区使用日期/时间,我们可以使用 ZonedDateTime 或 OffsetDateTime。因为我正在处理 LocalDate 可以提供帮助的 Period 和 Duration。

字符串到日期时间:

 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));

原文由 Shashwat Shekhar Shukla 发布,翻译遵循 CC BY-SA 3.0 许可协议

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"));

原文由 Pallavi Sonal 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题