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