DateTime. Проблема синтаксического анализа, не поддерживают в Системе. Глобализация. GregorianCalendar

У меня есть проблема, где определенная строка времени, содержавшаяся в Atom-ленте Gmail, не анализирует использование DateTime.Parse(). Я понимаю, что мог использовать DateTime. TryParse (), но мне любопытно к тому, почему эти два не работают, где, поскольку все остальные делают.

2009-12-28T24:11:48Z
2009-12-30T24:16:20Z

определенное исключение:

Система. FormatException: DateTime, представленный строкой, не поддерживается в системе календаря. Глобализация. GregorianCalendar.

Мое подозрение - то, что это из-за часа 24..., а не 00, но я не уверен, как я исправил бы это.

7
задан David Basarab 4 January 2010 в 15:59
поделиться

5 ответов

private static DateTime ParseDate(string s)
{
    DateTime result;
    if (!DateTime.TryParse(s, out result))
    {                
        result = DateTime.ParseExact(s, "yyyy-MM-ddT24:mm:ssK", System.Globalization.CultureInfo.InvariantCulture);
        result = result.AddDays(1);
    }
    return result;
}
16
ответ дан 6 December 2019 в 08:43
поделиться

Если это просто 24 вместо 00, вы можете просто заменить его и добавить день:

String s = "2009-12-28T24:11:48Z";
DateTime dt;
if (s.Contains("T24:")
{
    s = s.Replace("T24:", "T00:");

    if (DateTime.TryParse(s, out dt))
        dt.AddDays(1);
}
else
{
    DateTime.TryParse(s, out dt);
}
2
ответ дан 6 December 2019 в 08:43
поделиться

Запись DateTime в MSDN говорит, что она поддерживает ISO 8601, что позволяет как 24, так и 00. Она должна позволять формат типа [YYYY][MM][DD]T[hh][mm]Z, например 2010-01-04T14:04Z.

Полночь является особым случаем и может быть именуемый как "00:00", так и "00:00". "24:00". Используется обозначение "00:00". в начале календарного дня и используется чаще. В в конце дня использовать "24:00". Обратите внимание, что "2007-04-05T24:00" - это то же самое мгновение. как "2007-04-06T00:00" (см. Комбинированные представление даты и времени ниже).

1
ответ дан 6 December 2019 в 08:43
поделиться

Та же идея, что и md5sum, но по-другому:

 DateTime.ParseExact(
  "2009-12-28T24:11:48Z",
  new []{ "yyyy-MM-ddTHH:mm:ssK", "yyyy-MM-ddT24:mm:ssK" }, 
  System.Globalization.CultureInfo.InvariantCulture,
  System.Globalization.DateTimeStyles.None
)

Вам все равно нужно будет проверить, правильна ли дата.

.
1
ответ дан 6 December 2019 в 08:43
поделиться

оказалось, что Google использует стандарт даты и времени w3c: http://www.w3.org/TR/NOTE-datetime, какой c# не поддерживает? странно, но не так уж и странно.

этот проект, похоже, реализует это для вас.

http://www.codeproject.com/KB/cs/w3cdate.aspx

edit: yes, I see now that google's not doing it right, but there's a exception for that in the w3cdate c# structure.

1
ответ дан 6 December 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: