我正在使用SimpleDateFormat
,并且从两个不同的来源获得结果。一种来源使用"yyyy-MM-dd HH:mm:ss"
格式,而另一种来源使用"yyyy-MM-ddTHH:mm:ssZ"
。我对从第二种格式中获取时区(“Z”值)不感兴趣,有没有办法在不使用其他格式字符串的情况下获得这些时间?有些东西会忽略中间字符以及'ss'
之后的字符。
最佳答案
最干净,最清晰的解决方案是,您是否可以将字符串与两个来源分开,并对每个来源使用适当的格式化程序。
您可能会考虑的另一种方法是“尝试一下”以确定您拥有的格式,然后根据该格式选择格式器。例如if (result.contains("T") && results.endsWith("Z"))
。
由于您询问要避免使用不同的格式字符串,因此也可以这样做:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd[ ]['T']HH:mm:ss[X]");
System.out.println(LocalDateTime.parse("2015-11-06 21:23:18", formatter));
System.out.println(LocalDateTime.parse("2018-08-25T08:18:49Z", formatter));
该代码段的输出为:我建议您避免使用
SimpleDateFormat
类。它早已过时,而且非常麻烦。相反,我建议您使用java.time(现代的Java日期和时间API)。使用起来非常好。方括号表示格式的可选部分。该格式还将接受一个字符串,该字符串的中间有一个空格和一个
T
,一个没有任何字符串。对于大多数目的,我建议我们可以接受。编辑:您不能使用SimpleDateFormat
来扮演类似的把戏,它不接受方括号或可选零件的任何其他语法。我不愿意忽略第二个字符串中的偏移量而这样做,只是因为您说过想要这样做。我显然希望使用以下稍长的解决方案:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd[ ]['T']HH:mm:ss[X]")
.withZone(ZoneOffset.UTC);
System.out.println(OffsetDateTime.parse("2015-11-06 21:23:18", formatter));
System.out.println(OffsetDateTime.parse("2018-08-25T08:18:49Z", formatter));
输出是相同的,只是现在有偏移量:链接: Oracle tutorial: Date Time解释了如何使用
java.time
。关于java - SimpleDateFormat忽略字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33575947/