java - 使用时区标识符解析未知的 DateTime 字符串
问题描述
这个字符串如何20190612070000.000[-4:EDT]
解析成ZonedDateTime
?
我已经尝试过这种模式和其他模式,但到目前为止没有任何效果:
String dateString = "20190612070000.000[-4:EDT]";
ZonedDateTime dateTime = ZonedDateTime.parse(dateString, ofPattern("yyyyMMddHHmmss.S[x:z]"));
解决方案
DateTimeFormatter
没有与您的日期时间字符串匹配的模式的OOTB(开箱即用) 。您可以使用DateTimeFormatterBuilder
.
演示:
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.TextStyle;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.appendPattern("uuuuMMddHHmmss.SSS")
.appendLiteral('[')
.appendOffset("+H", "")
.appendLiteral(':')
.appendZoneText(TextStyle.SHORT)
.appendLiteral(']')
.toFormatter(Locale.ENGLISH);
String strDateTime = "20190612070000.000[-4:EDT]";
ZonedDateTime zdt = ZonedDateTime.parse(strDateTime, dtf);
System.out.println(zdt);
}
}
输出:
2019-06-12T07:00-04:00[America/New_York]
从Trail: Date Time了解更多关于java.time
现代日期时间 API *的信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。
推荐阅读
- python - 获取满足条件的最后一个可用值
- python - UTC 中的 Python os.path.getmtime 为什么
- reactjs - Play 中的 CORS 过滤器不明确
- apache-spark - Spark 应用程序以状态 143 退出
- php - 为什么我只从视图中获取第一行值到 Laravel 中的控制器?
- google-cloud-platform - 我们可以使用谷歌云功能将文件从一个项目复制到另一个项目吗
- c++ - free():在 tcache 2 中检测到双重空闲,组合
- sql - SQL 子查询未分组
- google-apps-script - IMPORTRANGE 应用程序脚本
- java - TMC bean:缺少 JDK,需要运行某些 NetBeans 模块