时间偏移量java_关于date:java.timeDateTimeFormatter模
式。。。
我正在尝试解析:2014-05-02-10.45.05.993280-5:00其中-5:00是UTC的偏移量。 在Java 8中使⽤java.time DateTimeFormatter。
对于第⼀点,我具有以下内容:ss.SSSSSS但是,我⽆法弄清楚解析偏移量的模式也应该是什么。
如果我的偏移量为4位数字(-05:00),则可以使⽤:ss.SSSSSSxxx,但这对3位数字⽆效。
有任何想法吗?
使⽤⼤写字母X代替x,因此使⽤XXX。区别在于⼤X可以将输⼊字母" Z"识别为UTC-Offset +00:00,⽽⼩模式X则不能识别。
建议的模式:
还请注意以下JDK错误:
java.time.format.DateTimeFormatter cannot parse an offset with single
digit hour
更新:
现在,我已经在错误⽇志中测试了所描述的解决⽅法。
String input ="2014-05-02-10.45.05.993280-5:00";
DateTimeFormatter f = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd-
System.out.println(f.parse(input, ZonedDateTime::from));
但这会引发异常:
Exception in thread"main" java.time.format.DateTimeParseException:
Text '2014-05-02-10.45.05.993280-5:00' could not be parsed at index 26
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1947)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1849)
at HelloWorld.main(HelloWorld.java:16)
因此,宽⼤的解析也⽆济于事。因此,现在只剩下三个选项:
使⽤错误报告者建议的解决⽅法:解决⽅法是分别解析⽇期/时间,使⽤⼿动编码的解析器作为偏移量,并将LocalDateTime与⼿动解析的偏移量组合。并⾮易事。
尝试您⾃⼰的专⽤字符串预处理。如果使⽤固定格式,则可以尝试在位置26插⼊零数字(如果总输⼊长度太⼩⼀位)。
或者,您可以使⽤可以执⾏此操作的外部库。如果您愿意添加额外的依赖关系,我的库Time4J(v4.0)可以做到。参见以下代码:
String input ="2014-05-02-10.45.05.993280-5:00";
ZonalDateTime zdt =
ZonalDateTime.parse(
input,
Moment.localFormatter("ss.SSSSSSXXX", PatternType.CLDR));
System.out.println(zdt); // 2014-05-02T10:45:05,993280UTC-05:00
ZonedDateTime result = TemporalAccessor();
java时间日期格式转换更新:根据JDK-bug-status,该错误已针对Java-9进⾏了修复,但是Java-8的反向端⼝似乎不可⽤。
该模式不起作⽤...但是该错误的链接确实像我的问题。 我尝试了构建器的建议,但这似乎也不起作⽤。
@猎豹你是对的。 对不起,您受到该错误的困扰。 如果您可以使⽤任何其他替代⽅法,请另参阅我的更新。
SimpleDateFormat符号的偏移量是Z检查Java7或Java8 SimpleDateFormat API。
然后,您的String解析器格式
2014-05-02-10.45.05.993280-5:00
⼀定是:
更新:对于DateTimeFormatter,⽤于格式化和解析的偏移量模式为:
O localized zone-offset offset-O GMT+8; GMT+08:00; UTC-08:00;
X zone-offset 'Z' for zero offset-X Z; -08; -0830; -08:30; -083015; -08:30:15;
x zone-offset offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15;
Z zone-offset offset-Z +0000; -0800; -08:00;
DateTimeFormatter中所需的模式是X。
我正在使⽤DateTimeFormatter并添加Z不能正常⼯作
您两次链接到Java 7。 Java 8 API在这⾥。
我尝试了这种⽅法的变体,但⽆法在格林尼治标准时间将其打印为" +00:00"格式。 它只会打印" +0000"。 另⼀⽅⾯,如果时区⾄少偏移了1,则DateTimeFormatter.ISO_OFFSET_DATE_TIME将打印以前的所需模式。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论