我有一个奇怪的问题,我需要解析一个看起来像1997-02-14T00:00:00.0000000+05:30
. 日期字符串的奇怪之处在于时区信息。它+05:30
不是通常的+0530
.
我已经准备好基本格式字符串yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ
,如果不是 TZ 信息,它会像一个魅力一样工作。
任何人都可以提出解决这个问题的方法吗?是否有某种格式字符串可以处理这种 TZ 信息?
提前致谢。
我有一个奇怪的问题,我需要解析一个看起来像1997-02-14T00:00:00.0000000+05:30
. 日期字符串的奇怪之处在于时区信息。它+05:30
不是通常的+0530
.
我已经准备好基本格式字符串yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ
,如果不是 TZ 信息,它会像一个魅力一样工作。
任何人都可以提出解决这个问题的方法吗?是否有某种格式字符串可以处理这种 TZ 信息?
提前致谢。
几个月前我自己研究过这个问题。如果我没记错的话,SimpleDateFormat 不够灵活,无法接受其他时区格式(我的是 +530)。我所做的是一个简单的预处理步骤——即在将字符串传递给 SimpleDateFormat 之前尝试删除冒号。
你能不能用正则表达式预处理并替换时区,例如
String dateAndTime = ...
String preprocessed = dateAndTime.replace("([+-])(\\d\\d):(\\d\\d)$", "$1$2$3");
// Go on with your life
SimpleDateFormat 应该接受这一点。从文档:
对于解析,也接受一般时区。
这些被指定为:
GMTOffsetTimeZone:
GMT Sign Hours : Minutes
看起来像你有什么?
如果失败,则Joda DateTimeFormat声称这样做。无论如何,出于各种原因(更一致和更简单的 API,格式化程序/解析器的线程安全等),我都会很想使用 Joda
这是来自 XML 文件(ISO8601 格式)的日期字符串吗?不幸的是,没有(简单的)方法可以用 来解析它SimpleDateFormat
,这正是由于时区部分中的 ':'SimpleDateFormat
无法正确处理。
看看我在另一个关于如何解析 XML 日期时间字符串的问题中的回答。
当然,预处理你的 String总是有技巧的。
如果没有人找到更好的答案,那已经是了。您可以将其封装在一个方法中,并带有注释来解释该 hack。
它的边缘仍然很粗糙,但应该可以工作:
我认为它应该使用for的replaceAll
方法。String
regular expression
String dateAndTime = ...
String preprocessed = dateAndTime.replaceAll("(GMT)([+-])(\\d\\d):(\\d\\d)", "$2$3$4");