Простой формат даты, дающий одну и ту же дату для двух разных строк - PullRequest
2 голосов
/ 22 июля 2011

Я написал небольшой метод для возврата объекта даты при задании строки.Метод, как показано ниже:

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), если отладчик показывает ту же дату?Должен ли я волноваться или я могу продолжить без каких-либо странных ошибок, появляющихся позже?

Ответы [ 3 ]

1 голос
/ 22 июля 2011

Это то, что Википедия говорит о ISO 8601 'Смещения по времени от UTC'

Смещение от UTC дается в формате ± [чч]: [мм],± [чч] [мм] или ± [чч].

Так что в основном оба формата, которые вы используете, разрешены, и вам не стоит об этом беспокоиться.

0 голосов
/ 22 июля 2011

Документы Android для SimpleDateFormat указывают, что они используют часовые пояса RFC 822. Когда я перешел к JavaDocs для SimpleDateFormat, который Android пытается имитировать с помощью этого класса, я увидел эту заметку о часовых поясах RFC 822:

Часовой пояс RFC 822: для форматирования используется четырехзначный часовой пояс RFC 822. Используемый формат:

 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.

В определении общих часовых поясов вы заметите, что они используют ':'.

Это означает, что ваши две строки, хотя и разные, будут проанализированы в одно и то же время.

  1. RFC 822 -> 2011-07-21T19: 44: 00.000-0400
  2. Общие сведения -> 2011-07-21T19: 44: 00.000-04: 00
0 голосов
/ 22 июля 2011

Двоеточие во второй строке не имеет значения;Вы можете действовать без страха.

...