解析包含日期、时间和偏移量的时间戳
Parsing a timestamp containg the date, time & offset
我正在使用Java 5。
我需要解析 ISO 8601 格式的日期时间字符串,例如 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'T'HH:mm:ss.SSSz
,但得到相同的结果:
java.text.ParseException: Unparseable date: "2011-11-30T12:00:00.000+00:00"
有什么想法吗?
您应该从 +00:00
中删除冒号,因为此格式仅适用于 X
模式,而 Java 5, only from Java SE 7 中不可用。
更多信息:RFC822 需要这种样式(不带冒号),在 ISO 8601 中两者都是正确的。
您当前在 SimpleDateFormat
构造函数 yyyy-MM-dd'T'HH:mm:ss.SSSZ
中使用的模式应该接受以下格式的时间戳:
2011-11-30T12:00:00.000+0000
但是,您需要的是能够处理时间戳的东西,例如:
2011-11-30T12:00:00.000+00:00
为此特定目的,应在 SimpleDateFormat
中指定 yyyy-MM-dd'T'HH:mm:ss.SSSXXX
格式( 即 问题在于时间戳的时区组件的格式).
乔达时间
如果您不想手动解析它,则必须使用 Joda-Time (Maven)(支持 Java 1.5)。只需使用 new DateTime(String)
创建一个对象,然后您就可以通过 toDate()
方法获得 Date
。
时区
将要分配给生成的日期时间对象的时区传递。与 java.util.Date 不同,Joda-Time DateTime
object knows its own assigned time zone (DateTimeZone
)。如果省略,则隐式分配 JVM 当前的默认时区。
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" ); // Or perhaps DateTimeZone.UTC
DateTime dateTime = new DateTime( "2011-11-30T12:00:00.000+00:00", zone );
我正在使用Java 5。
我需要解析 ISO 8601 格式的日期时间字符串,例如 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'T'HH:mm:ss.SSSz
,但得到相同的结果:
java.text.ParseException: Unparseable date: "2011-11-30T12:00:00.000+00:00"
有什么想法吗?
您应该从 +00:00
中删除冒号,因为此格式仅适用于 X
模式,而 Java 5, only from Java SE 7 中不可用。
更多信息:RFC822 需要这种样式(不带冒号),在 ISO 8601 中两者都是正确的。
您当前在 SimpleDateFormat
构造函数 yyyy-MM-dd'T'HH:mm:ss.SSSZ
中使用的模式应该接受以下格式的时间戳:
2011-11-30T12:00:00.000+0000
但是,您需要的是能够处理时间戳的东西,例如:
2011-11-30T12:00:00.000+00:00
为此特定目的,应在 SimpleDateFormat
中指定 yyyy-MM-dd'T'HH:mm:ss.SSSXXX
格式( 即 问题在于时间戳的时区组件的格式).
乔达时间
如果您不想手动解析它,则必须使用 Joda-Time (Maven)(支持 Java 1.5)。只需使用 new DateTime(String)
创建一个对象,然后您就可以通过 toDate()
方法获得 Date
。
时区
将要分配给生成的日期时间对象的时区传递。与 java.util.Date 不同,Joda-Time DateTime
object knows its own assigned time zone (DateTimeZone
)。如果省略,则隐式分配 JVM 当前的默认时区。
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" ); // Or perhaps DateTimeZone.UTC
DateTime dateTime = new DateTime( "2011-11-30T12:00:00.000+00:00", zone );