我拨打返回GMT日期的服务。它自11月以来一直运作良好,但现在夏令时活跃,它失败了。以下是非夏令时的样本日期:
2011-12-07T15:50:01Z
从今天开始(夏令时):
2012-03-26T11:05:01+01:00
以前我一直在使用这种模式:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.UK);
但它在第二个日期失败了ParseExcepton(“Unparsable date ...”)。那么,一种模式可以用于两者,如果是这样,它是什么?如果我不能同时使用一种模式,那么上面第二个日期的正确模式是什么?
它不应该有所作为,但如果确实如此,则在Android平台上使用它。
答案 0 :(得分:2)
你使用Android肯定会有所不同,因为如果你使用的是Java 5/6或7,它会对这种情况产生影响。
您正在使用的模式指定要解析的文字“Z”(也称为“T”)。它不是解析时区。您需要从'Z'周围删除单引号以开始解析实际时区。
根据Android JavaDoc,目前尚不清楚大写Z是否会在这种情况下起作用,因为小时/分钟的格式非常具体。我对Android SDK的确认不够了解,但结果肯定会对标准Java产生影响。
答案 1 :(得分:2)
新的ISO8601时区模式由Java 7中引入的X
模式说明符涵盖。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.UK);
答案 2 :(得分:1)
如果您使用java6,则必须识别模式,然后应用formater
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
String date2Str="2011-12-07T15:50:01Z";
Date date2 = df.parse(date2Str);
System.out.println(date2.toString());
SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz");
String date1Str="2012-03-26T11:05:01GMT+01:00";
Date date1 = df2.parse(date1Str);
System.out.println(date1.toString());