如何使用DateTimeFormatter用冒号解析偏移量? - java

我有以下字符串:String timeStamp = "2020-01-31 12:13:14 +03:00"
我尝试使用Java 8 DateTimeFormatter解析它。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( format );
tmpTimestamp = ZonedDateTime.parse( timeStamp, formatter );

其中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",

没有任何工作。我总是在偏移子字符串“+03:00”中指向“+”或“:”字符的DateTimeParseException
根据JavaDocs:Class DateTimeFormatter“+03:00”应受以下任意一种支持:ZXx

那么问题是如何构造格式化程序字符串以对其进行解析?

参考方案

您应该使用时间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);

从docs:

偏移量X和x:它将根据图案字母的数量来格式化偏移量。
除非分钟非零,否则一个字母仅输出小时,例如“+01”,在这种情况下,分钟也会输出,例如“+0130”。
两个字母输出小时和分钟,不带冒号,例如'+0130'。
三个字母输出小时和分钟,并带有冒号,例如'+01:30'。
四个字母输出小时和分钟,可选秒,不带冒号,例如“+013015”。
五个字母输出小时和分钟,可选秒,以冒号表示,例如“+01:30:15”。
六个或更多字母会引发IllegalArgumentException。
当要输出的偏移量为零时,模式字母“X”(大写)将输出“Z”,而模式字母“x”(小写)将输出“+00”,“+ 0000”或“+00” :00'。

或者,您可以使用五个字母(XXXXX),也可以使用ZZZZZZZZ代替XXXXXXXX

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:将毫秒转换为HH:MM:SS - java

我有一个毫秒单位的值,我想将此值转换为HH::MM:SS.fff这仅是持续时间的目的。我知道有一个基本的方法可以做到这一点:String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes(millis), TimeUnit.MILLISECONDS.toSeconds(mil…

Java Scanner读取文件的奇怪行为 - java

因此,在使用Scanner类从文件读取内容时,我遇到了一个有趣的问题。基本上,我试图从目录中读取解析应用程序生成的多个输出文件,以计算一些准确性指标。基本上,我的代码只是遍历目录中的每个文件,并使用扫描仪将其打开以处理内容。无论出于何种原因,扫描程序都不会读取其中的一些文件(所有UTF-8编码)。即使文件不是空的,scanner.hasNextLine()在…