我写了一个小方法,在给定字符串时返回日期对象。方法如下所示:
public Date getDateObjectFromString(String dateAsString)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date tempDate = null;
try
{
tempDate = sdf.parse(dateAsString);
}
catch(ParseException pe)
{
//do some error reporting here
}
return tempDate;
}
一切正常,但我遇到了一些我想澄清的事情。当我将两个不同的字符串传递给此方法时,它在读取调试器中的值时返回相同的日期。我传递的两个字符串是:
2011-07-21T19:44:00.000-0400
2011-07-21T19:44:00.000-04:00
正如您所看到的,这两个字符串几乎相同,当我在调试器中查看这些新创建日期的变量输出时,它会显示两个字符串完全相同的日期/时间。那么,如果调试器显示相同的日期,第二个字符串中的冒号(04:00)是否有任何区别?我应该担心还是可以在没有出现任何奇怪错误的情况下继续进行?
答案 0 :(得分:1)
这就是维基百科关于ISO 8601 'Time offsets from UTC'
的说法UTC的偏移量以±[hh]:[mm],±[hh] [mm]或±[hh]的格式给出。
所以基本上你使用的两种格式都是允许的,你不应该担心它。
答案 1 :(得分:0)
第二根弦中的冒号没有区别;你可以毫无畏惧地继续前进。
答案 2 :(得分:0)
SimpleDateFormat的Android文档提到他们使用RFC 822时区。当我使用SimpleDateFormat的JavaDocs时,这是Android试图模仿这个类,我看到this note关于RFC 822时区:
RFC 822时区:用于格式化,RFC 822 4位时区 使用格式:
RFC822TimeZone: Sign TwoDigitHours Minutes TwoDigitHours: Digit Digit
TwoDigitHours必须介于00和23之间。其他定义如下 一般时区。对于解析,一般时区也是 接受强>
以下是一般时区的说明:
常规时区:时区被解释为文本(如果有) 名。对于表示GMT偏移值的时区,以下内容 使用语法:
GMTOffsetTimeZone: GMT Sign Hours : Minutes Sign: one of ^^^ + - Hours: Digit Digit Digit Minutes: Digit Digit Digit: one of 0 1 2 3 4 5 6 7 8 9
小时数必须介于0到23之间,分钟数必须介于00和59之间。 格式与区域设置无关,数字必须取自 Unicode标准的基本拉丁语块。
在一般时区的定义中,您会注意到它们使用':'。
这意味着你的两个字符串虽然不同,但会被同时解析。