【发布时间】:2021-12-05 06:10:59
【问题描述】:
这个问题听起来可能与 Stackoverflow 上的大多数其他问题相似,但我无法弄清楚我的问题。 我想把字符串值解析成日期。
String dateTime = "2020 年 10 月 23 日 02:44:58 +1000"
这个问题的解决方法是:
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
builder.parseCaseInsensitive();
builder.appendPattern("d MMM yyyy HH:mm[:ss] Z");
DateTimeFormatter dtf = builder.toFormatter();
ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTime, dtf);
Instant instant = zonedDateTime.toInstant();
Date finalDate = Date.from(instant);
如果我想用时区解析日期,而不是像 String dateTime = "23 Oct 2020 02:44:58 AEST" 那么我需要更改 builder.appendPattern ("d MMM yyyy HH:mm[:ss] Z"); 从大写 Z 到小 z 如提到的here。
这里的问题是如何使我的解析器足够灵活,以便它处理时区或偏移值?
注意。我使用 [ss] 作为秒字段是可选的。根据文档,使用 VV 与 z 类似,而“V”对我不起作用。
【问题讨论】:
-
尽可能避免解析时区缩写,如
AEST。虽然AEST可能是明确的,但大多数最常见的缩写都是模棱两可的,你不知道你得到了什么。
标签: java datetime java-8 zoneddatetime datetimeformatter