Sew*_*zki 5 java datetime parsing java-8 dateformatter
我有以下字符串:String timeStamp = "2020-01-31 12:13:14 +03:00"。我尝试使用 Java 8 DateTimeFormatter 解析它。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( format );
tmpTimestamp = ZonedDateTime.parse( timeStamp, formatter );
Run Code Online (Sandbox Code Playgroud)
其中format之一是:
"yyyy-MM-dd' 'HH:mm:ss' 'Z",
"yyyy-MM-dd' 'HH:mm:ss' 'X",
"yyyy-MM-dd' 'HH:mm:ss' 'x",
"yyyy-MM-dd HH:mm:ss Z",
"yyyy-MM-dd HH:mm:ss X",
"yyyy-MM-dd HH:mm:ss x",
Run Code Online (Sandbox Code Playgroud)
没有一个在工作。我总是DateTimeParseException在偏移子字符串“+03:00”中指向“+”或“:”字符
根据 JavaDocs:类 DateTimeFormatter "+03:00" 应受以下任一支持:Z、X和x。
那么问题是如何构造格式化字符串来解析它呢?
您应该使用时间X( yyyy-MM-dd HH:mm:ss XXX):
String timeStamp = "2020-01-31 12:13:14 +03:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss XXX");
ZonedDateTime tmpTimestamp = ZonedDateTime.parse(timeStamp, formatter);
Run Code Online (Sandbox Code Playgroud)
来自文档:
偏移量 X 和 x:这根据模式字母的数量格式化偏移量。
一个字母仅输出小时,例如“+01”,除非分钟非零,在这种情况下也会输出分钟,例如“+0130”。
两个字母输出小时和分钟,不带冒号,例如“+0130”。
三个字母输出小时和分钟,带有冒号,例如“+01:30”。
四个字母输出小时和分钟以及可选的秒,不带冒号,例如“+013015”。
五个字母输出小时和分钟以及可选的秒,带有冒号,例如“+01:30:15”。
六个或更多字母将引发 IllegalArgumentException。
当要输出的偏移量为零时,模式字母“X”(大写)将输出“Z”,而模式字母“x”(小写)将输出“+00”、“+0000”或“+00” :00'。
您也可以使用五个字母 ( XXXXX),也可以使用ZZZorZZZZZ代替XXXor XXXXX。
| 归档时间: |
|
| 查看次数: |
3130 次 |
| 最近记录: |