Android 为两个不同字符串提供相同日期的简单日期格式
我编写了一个小方法,在给定字符串时返回日期对象。方法如下所示:Android 为两个不同字符串提供相同日期的简单日期格式,android,simpledateformat,Android,Simpledateformat,我编写了一个小方法,在给定字符串时返回日期对象。方法如下所示: public Date getDateObjectFromString(String dateAsString) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); Date tempDate = null; try { tempDate = sdf.parse(dateAsStri
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)会有什么不同吗?我应该担心吗?或者我可以在以后不出现任何奇怪的错误的情况下继续吗?第二个字符串中的冒号没有任何区别;你可以无所畏惧地继续进行。这是维基百科关于ISO 8601的说法 UTC的偏移量以±[hh]:[mm]、±[hh][mm]或±[hh]的格式给出 因此,基本上,您使用的两种格式都是允许的,您不必担心。Android文档提到它们使用RFC 822时区。当我访问SimpleDataFormat的JavaDocs时,Android正试图用这个类来模拟它,我看到了RFC 822时区: RFC 822时区:对于格式化,RFC 822为4位时区 使用的格式为:
RFC822TimeZone:
Sign TwoDigitHours Minutes
TwoDigitHours:
Digit Digit
两位数必须介于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标准的基本拉丁语块
在通用时区的定义中,您会注意到它们使用了“:”
这意味着您的两个字符串虽然不同,但将被同时解析
在传入字符串之前,您不能规范化所有字符串吗?这可能是最好的办法anyway@citizen康涅狄格州-是的…但我只是想知道有什么区别,如果有的话。谢谢你的回复。我通常会把这个答案给保罗·索尼埃,因为他是第一个,但后来,索尼埃先生来了,并给出了更好的解释(他也为我回答了很多问题,为此我感谢他)。然后你过来,让我完全理解这个问题。谢谢你,先生。