我有一个奇怪的问题,我需要解析一个看起来像1997-02-14T00:00:00.0000000+05:30
的日期字符串。关于日期字符串的奇怪之处是时区信息。它是+05:30
而不是通常的+0530
。
我已准备好基本格式字符串yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ
,如果不是TZ信息,它就像魅力一样。
有人能建议解决这个问题吗?是否有某种格式字符串可以处理这种TZ信息?
提前致谢。
答案 0 :(得分:5)
我几个月前自己研究过这个问题。如果我没记错的话,SimpleDateFormat不够灵活,不能接受其他时区格式(我的是+530)。我所做的是一个简单的预处理步骤 - 即在将String传递给SimpleDateFormat之前尝试删除冒号。
答案 1 :(得分:3)
你不能用正则表达式进行预处理并替换时区,例如
String dateAndTime = ...
String preprocessed = dateAndTime.replace("([+-])(\\d\\d):(\\d\\d)$", "$1$2$3");
// Go on with your life
答案 2 :(得分:2)
SimpleDateFormat应该接受这个。来自the doc:
对于解析,一般时区是 也接受了。
和这些are specified as:
GMTOffsetTimeZone:
GMT Sign Hours : Minutes
看起来像你有什么?
如果失败,那么Joda DateTimeFormat声称要这样做。无论如何,我都很想使用Joda,原因有很多(更一致和更简单的API,格式化程序/解析器的线程安全等等。)
答案 3 :(得分:2)
这是偶然的XML文件(ISO8601格式)的日期字符串吗?遗憾的是,没有(简单)方法可以使用SimpleDateFormat
解析此问题,这完全是由于SimpleDateFormat
无法正确处理的时区部分中的“:”。
查看有关如何解析XML日期时间字符串的my answer in this other question。
答案 4 :(得分:2)
当然,总有预处理你的字符串的黑客。
如果没有人找到更好的答案,那就已经有了。您可以将其封装在一个方法中,并附带注释来解释黑客攻击。
答案 5 :(得分:0)
边缘仍然很粗糙,但应该有效:
答案 6 :(得分:0)
我认为它应该使用replaceAll
的{{1}}方法{/ 1}}。
String