简单的日期格式为两个不同的字符串提供相同的日期

发布于 2024-11-25 16:40:27 字数 701 浏览 2 评论 0原文

我编写了一个小方法,在给定字符串时返回日期对象。方法如下所示:

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)中的冒号有什么区别吗?我应该担心还是可以继续进行而不会在以后出现任何奇怪的错误?

I have written a small method to return a date object when given a string. The method is as shown below:

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;
}

Everything is working ok, but I've run into something that I'd like to clarify. When I pass two different strings to this method it is returning the same date when reading the value in the debugger. The two strings I am passing are:

2011-07-21T19:44:00.000-0400

2011-07-21T19:44:00.000-04:00

As you can see these two strings are nearly identical, and when I look at the variable output for these newly created dates in the debugger, it shows the exact same date/time for either string. So, does the colon in the second string (at 04:00) make any difference if the debugger is showing the same date? Should I worry or can I proceed without any weird bugs popping up later on?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

缪败 2024-12-02 16:40:27

这是维基百科关于 ISO 8601 的说法 “与 UTC 的时间偏移”

与 UTC 的偏移量以 ±[hh]:[mm]、±[hh][mm] 或 ±[hh] 格式给出。

因此基本上您使用的两种格式都是允许的,您不必担心。

This is what Wikipedia says about ISO 8601 'Time offsets from UTC'

The offset from UTC is given in the format ±[hh]:[mm], ±[hh][mm], or ±[hh].

So basically both formats you are using are permitted and you shouldn't worry about it.

祁梦 2024-12-02 16:40:27

SimpleDateFormat 的 Android 文档提到它们使用 RFC 822 时区。当我访问 SimpleDateFormat 的 JavaDocs(Android 试图用此类来模仿)时,我看到 此注释关于 RFC 822 时区:

RFC 822 时区:对于格式化,RFC 822 4 位时区
使用的格式:

<前><代码> RFC822时区:
签署两位数字小时分钟
两位数小时:
数字 数字

TwoDigitHours 必须介于 00 和 23 之间。其他定义如下
一般时区。为了解析,一般时区也是
已接受。

以下是一般时区的注释:

一般时区:时区被解释为文本(如果有)
名称。对于表示 GMT 偏移值的时区,以下
使用语法:

<前><代码> GMTOffsetTimeZone:
GMT 标志 小时 : 分钟
符号: ^^^ 之一
+ -
营业时间:
数字
数字 数字
分钟:
数字 数字
数字:其中之一
0 1 2 3 4 5 6 7 8 9

小时必须介于 0 到 23 之间,分钟必须介于 00 到 59 之间。
格式与区域设置无关,并且数字必须取自
Unicode 标准的基本拉丁语块。

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

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

  1. RFC 822 --> 2011-07-21T19:44:00.000-0400
  2. 常规 --> 2011-07-21T19:44:00.000-04:00

The Android docs for SimpleDateFormat mention that they use RFC 822 timezones. When I went to the JavaDocs for SimpleDateFormat, which is what Android is attempting to mimic with this class, I see this note about RFC 822 timezones:

RFC 822 time zone: For formatting, the RFC 822 4-digit time zone
format is used:

 RFC822TimeZone:
         Sign TwoDigitHours Minutes
 TwoDigitHours:
         Digit Digit

TwoDigitHours must be between 00 and 23. Other definitions are as for
general time zones. For parsing, general time zones are also
accepted
.

And here is the note for general time zones:

General time zone: Time zones are interpreted as text if they have
names. For time zones representing a GMT offset value, the following
syntax is used:

 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

Hours must be between 0 and 23, and Minutes must be between 00 and 59.
The format is locale independent and digits must be taken from the
Basic Latin block of the Unicode standard.

In the definition for the general time zones, you will notice they use a ':'.

This means that your two strings, while different, will be parsed to the same time.

  1. RFC 822 --> 2011-07-21T19:44:00.000-0400
  2. General --> 2011-07-21T19:44:00.000-04:00
提笔书几行 2024-12-02 16:40:27

第二个字符串中的冒号没有什么区别;您可以毫无恐惧地继续前进。

The colon in the second string doesn't make a difference; you can proceed without fear.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文