Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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 解析包含日期、时间和;抵消_Java_Date_Iso8601 - Fatal编程技术网

Java 解析包含日期、时间和;抵消

Java 解析包含日期、时间和;抵消,java,date,iso8601,Java,Date,Iso8601,我在用 我需要解析格式为2011-11-30T12:00:00.000+00:00的日期时间字符串: String dateString = "2011-11-30T12:00:00.000+00:00"; DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); Date parsed=null; try { parsed = df.parse(dateString); } 我也尝试过这种模式:yyyy-

我在用

我需要解析格式为
2011-11-30T12:00:00.000+00:00的日期时间字符串

String dateString = "2011-11-30T12:00:00.000+00:00";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
Date parsed=null;
try {
    parsed = df.parse(dateString);
}
我也尝试过这种模式:
yyyy-MM-dd'HH:MM:ss.SSSz
,但得到了相同的结果:

java.text.ParseException: Unparseable date: "2011-11-30T12:00:00.000+00:00"

有什么想法吗?

您应该从
+00:00
中删除冒号,因为此格式仅适用于
X
模式,该模式在中不可用,仅在中可用


更多信息:RFC822需要此样式(不带冒号),在ISO 8601中两者都是正确的。

您当前在
SimpleDataFormat
构造函数中使用的模式,
yyyy-MM-dd'T:HH:MM:ss.SSSZ
应该接受以下格式的时间戳:

2011-11-30T12:00:00.000+0000
但是,您需要的是能够处理时间戳的东西,例如:

2011-11-30T12:00:00.000+00:00
为此,应在
SimpleDataFormat
中指定
yyyy-MM-dd'T'HH:MM:ss.SSSXXX
格式(即,问题在于时间戳时区组件的格式)

乔达时间 如果不想手动解析,则必须使用(支持Java1.5)。只需使用
newdatetime(String)
创建一个对象,就可以通过
toDate()方法获得
Date

时区 传递要指定给结果日期时间对象的时区。与java.util.Date不同,Joda时间对象知道自己分配的时区()。如果省略,JVM的当前默认时区将被隐式分配

DateTimeZone zone = DateTimeZone.forID( "America/Montreal" ); // Or perhaps DateTimeZone.UTC
DateTime dateTime = new DateTime( "2011-11-30T12:00:00.000+00:00", zone );

@罗伯特鲁德尔:是的,对不起,我在发帖时没有意识到这一点。正如@meskobalazs在其明智的回复中指出的那样,您仍然可以自由地重新格式化所有的时间戳,以排除冒号(
),然后您应该删除时区中的冒号。使用indexOf(“.”)查找时段的位置,使用该位置查找时区冒号dateString.indexOf((“:”),dateString.indexOf(“.”)。然后使用子字符串操作删除冒号。我将标题中的“时区”改为“偏移”。A是UTC的偏移量,单位为
小时:分钟
,加上一组关于如何处理夏时制(DST)等异常情况的历史、当前和未来规则。对于更高版本的Java,请使用Java.Time类,而不是麻烦的遗留日期时间类(
SimpleDataFormat
&
date
)。time类也取代了Joda time项目;日期:2015-01-14T00:00:00-04:00我得到:2015-01-13T23:00:00.000-05:00你说的“我得到”是什么意思?如果您的时区是
-05:00