ric*_*din 5 java date-formatting java-8 dateformatter
String我正在使用 Java 8 开发一个函数,该函数必须处理以下LocalDateTime日期的转换:
这些字符串是从我无法更改的外部库生成的。
按照SO答案Optional parts in SimpleDateFormat中给出的建议,我尝试使用 type 提供的可选格式DateTimeFormatter,使用字符[和]。我尝试了以下模式:
yyyy-MM-dd HH:mm:ss[.S[S[S]]] Z zyyyy-MM-dd HH:mm:ss[.S[S][S]] Z z然而,它们都不起作用。
有什么建议吗?
您可以使用和DateTimeFormatterBuilder重用常量来构建模式:ISO_LOCAL_DATEISO_LOCAL_TIME
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE)
.appendLiteral(" ")
.append(DateTimeFormatter.ISO_LOCAL_TIME)
.appendPattern("[ Z z]")
.toFormatter();
ZonedDateTime dt = ZonedDateTime.parse(date, formatter);
Run Code Online (Sandbox Code Playgroud)
诀窍在于DateTimeFormatter.ISO_LOCAL_TIME处理用于表示其本身的毫秒数的不同位数。来自DateTimeFormatter.ISO_LOCAL_TIMEJavaDoc:
这将返回一个不可变的格式化程序,能够格式化和解析 ISO-8601 扩展本地时间格式。格式包括:
[..]
1 到 9 位数字,表示纳秒。将根据需要输出尽可能多的数字。