0

我有一个奇怪的问题,我需要解析一个看起来像1997-02-14T00:00:00.0000000+05:30. 日期字符串的奇怪之处在于时区信息。它+05:30不是通常的+0530.

我已经准备好基本格式字符串yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ,如果不是 TZ 信息,它会像一个魅力一样工作。

任何人都可以提出解决这个问题的方法吗?是否有某种格式字符串可以处理这种 TZ 信息?

提前致谢。

4

7 回答 7

5

几个月前我自己研究过这个问题。如果我没记错的话,SimpleDateFormat 不够灵活,无法接受其他时区格式(我的是 +530)。我所做的是一个简单的预处理步骤——即在将字符串传递给 SimpleDateFormat 之前尝试删除冒号。

于 2009-10-12T14:21:37.493 回答
3

你能不能用正则表达式预处理并替换时区,例如

String dateAndTime = ...
String preprocessed = dateAndTime.replace("([+-])(\\d\\d):(\\d\\d)$", "$1$2$3");
// Go on with your life 
于 2009-10-12T14:23:21.733 回答
2

SimpleDateFormat 应该接受这一点。从文档

对于解析,也接受一般时区。

这些被指定为

GMTOffsetTimeZone:
             GMT Sign Hours : Minutes

看起来像你有什么?

如果失败,则Joda DateTimeFormat声称这样做。无论如何,出于各种原因(更一致和更简单的 API,格式化程序/解析器的线程安全等),我都会很想使用 Joda

于 2009-10-12T14:21:15.653 回答
2

这是来自 XML 文件(ISO8601 格式)的日期字符串吗?不幸的是,没有(简单的)方法可以用 来解析它SimpleDateFormat,这正是由于时区部分中的 ':'SimpleDateFormat无法正确处理。

看看我在另一个关于如何解析 XML 日期时间字符串的问题中的回答。

于 2009-10-12T14:22:14.263 回答
2

当然,预处理你的 String总是有技巧的。

如果没有人找到更好的答案,那已经是了。您可以将其封装在一个方法中,并带有注释来解释该 hack。

于 2009-10-12T14:22:24.747 回答
0

它的边缘仍然很粗糙,但应该可以工作:

http://pastebin.com/f7bbb0b43

于 2009-10-12T15:21:27.187 回答
0

我认为它应该使用for的replaceAll方法。Stringregular expression

String dateAndTime = ...
String preprocessed = dateAndTime.replaceAll("(GMT)([+-])(\\d\\d):(\\d\\d)", "$2$3$4");
于 2010-09-15T08:08:30.167 回答