java - DateTimeFormatter 解析带有区域偏移量和时区的字符串
问题描述
这个问题听起来可能与 Stackoverflow 上提出的大多数其他问题相似,但我无法弄清楚我的问题。我想将字符串值解析为日期。
字符串日期时间 =“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 。
这里的问题是如何使我的解析器足够灵活,以处理时区或偏移值?
笔记。我使用 [ss] 作为秒字段是可选的。根据文档,使用 VV 与 z 类似,而“V”对我不起作用。
解决方案
您可以将它们作为可选部分添加到格式化程序,就像您对秒部分所做的那样:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("d MMM yyyy HH:mm[:ss] [Z][z]")
.toFormatter(Locale.ROOT);
[
并]
表示可选部分:如果可以通过括号内的模式成功解析相应的文本,则消耗相应的文本,否则不消耗任何文本并跳过其中的模式。
推荐阅读
- java - 如何从java中的命令行解析正斜杠?
- c# - 在低级别获取按键
- javascript - 我如何打印所有公会名称和成员数量?
- javascript - Nuxt Js 全局 CSS 与本地 CSS 问题
- uml - 在高层次上期望序列图中类的接口看起来像类图中的对应部分是不合理的吗?
- code-injection - 扩展可执行文件的 .text 部分失败
- linux - Nginx 的 CPU 可扩展性方法(每个进程 epoll 事件队列)是最优的吗?
- ffmpeg - ffmpeg dshow网络摄像头属性保存和加载的正确方法是什么?
- r - 图中的垂直 x 标签
- javascript - 使用 nodejs 提供 css 文件