Java 7 SimpleDateFormat通过字符X(而不是大写或小写Z)在ISO 8601格式的类中引入了支持.在Java 6中支持这样的格式需要预处理,因此最好的方法是问题.
这种新格式是Z(大写Z)的超集,另外还有两种变体:
因此,正如人们可以从Java 7文档中SimpleDateFormat看到的那样,以下3种格式现在是有效的(而不仅仅是ZJava 6中涵盖的第二种格式),当然,等效:
正如之前关于支持这种"扩展"时区格式的特殊情况的问题所讨论的那样,始终使用':'作为分隔符,将Java 7功能向后移植到Java 6中的最佳方法是将类子SimpleDateformat类化并覆盖其parse()方法,即:
public Date parse(String date, ParsePosition pos)
{
String iso = ... // Replace the X with a Z timezone string, using a regex
if (iso.length() == date.length())
{
return null; // Not an ISO 8601 date
}
Date parsed …Run Code Online (Sandbox Code Playgroud) 我的日期格式是yyyy-MM-dd'T'HH:mm:ss.SSSZ,生成日期:
2013-10-08T12:14:39.721+0100
Run Code Online (Sandbox Code Playgroud)
但我需要的日期是:
2013-10-08T12:14:39.721+01:00
Run Code Online (Sandbox Code Playgroud)
什么日期格式将生成冒号的偏移量?