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标准的基本拉丁语块

在通用时区的定义中,您会注意到它们使用了“:”

这意味着您的两个字符串虽然不同,但将被同时解析

  • RFC 822-->2011-07-21T19:44:00.000-0400
  • 概述-->2011-07-21T19:44:00.000-04:00

  • 在传入字符串之前,您不能规范化所有字符串吗?这可能是最好的办法anyway@citizen康涅狄格州-是的…但我只是想知道有什么区别,如果有的话。谢谢你的回复。我通常会把这个答案给保罗·索尼埃,因为他是第一个,但后来,索尼埃先生来了,并给出了更好的解释(他也为我回答了很多问题,为此我感谢他)。然后你过来,让我完全理解这个问题。谢谢你,先生。