Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java.text.simpleDataFormat解析日期字符串_Java_Datetime_Formatting_Iso8601 - Fatal编程技术网

使用java.text.simpleDataFormat解析日期字符串

使用java.text.simpleDataFormat解析日期字符串,java,datetime,formatting,iso8601,Java,Datetime,Formatting,Iso8601,我有一个奇怪的问题,我需要解析一个看起来像1997-02-14T00:00:00.0000000+05:30的日期字符串。日期字符串的奇怪之处在于时区信息。现在是+05:30,而不是通常的+0530 我已经准备好了基本格式字符串yyyy-MM-dd'T'HH:MM:ss.sssz,如果没有TZ信息,它会像一个符咒一样工作 有人能提出解决这个问题的办法吗?是否有某种格式字符串可以处理这种信息 提前感谢。SimpleDateFormat应该接受这一点。发件人: 对于解析,一般时区是 也接受了 这些:

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

我已经准备好了基本格式字符串yyyy-MM-dd'T'HH:MM:ss.sssz,如果没有TZ信息,它会像一个符咒一样工作

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


提前感谢。

SimpleDateFormat应该接受这一点。发件人:

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

这些:

看起来和你的一样


如果这样做失败了,那么政府就会要求这样做。无论如何,我都会尝试使用Joda,原因有很多,比如更一致、更简单的API、格式化程序/解析器的线程安全等等。

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

这是来自XML文件ISO8601格式的日期字符串吗?不幸的是,使用SimpleDateFormat无法轻松解析此问题,这正是因为SimpleDateFormat无法正确处理时区部分中的“:”


看看如何解析XML日期时间字符串。

当然,对字符串进行预处理总是有困难的


如果没有人能找到更好的答案,那就已经有了。你可以把它封装在一个方法中,用一条注释来解释黑客行为。

你不能用正则表达式进行预处理并替换时区吗

String dateAndTime = ...
String preprocessed = dateAndTime.replace("([+-])(\\d\\d):(\\d\\d)$", "$1$2$3");
// Go on with your life 

边缘仍然粗糙,但应能起作用:

我认为正则表达式应该使用字符串的replaceAll方法


我刚刚测试了它,但它不起作用:新的SimpleDataFormatee,d MMM yyy HH:mm:ss z.parseWed,2001年7月4日12:08:56-07:00如果说你有GMT-07:00,会发生什么?我知道这不是你现在拥有的是的,它在将GMT预先设置为时区Wed,2001年7月4日12:08:56 GMT-07:00后起作用。但考虑到问题的格式,在格式字符串中使用“z”而不是“z”仍然不是解析这些日期的可行方法。是的。同意。您可能想查看Joda,了解此问题和其他时间/日期问题
String dateAndTime = ...
String preprocessed = dateAndTime.replace("([+-])(\\d\\d):(\\d\\d)$", "$1$2$3");
// Go on with your life 
String dateAndTime = ...
String preprocessed = dateAndTime.replaceAll("(GMT)([+-])(\\d\\d):(\\d\\d)", "$2$3$4");