Вопрос

Эта линия кода работает на моем компьютере (64-битная Win7). Я проверил на XP 32бита в VM. Работает нормально.

static bool HasExpire { get { return DateTime.Now >= DateTime.Parse("10/20/2010"); } }

Однако на клиентской машине он бросает это исключение:

Необработанное исключение было создано во время выполнения текущего веб-запроса. Информация о происхождении и местоположении исключения может быть идентифицирована с использованием следа стека исключения ниже.

[FormatException: String was not recognized as a valid DateTime.]
   System.DateTimeParse.Parse(String s,
       DateTimeFormatInfo dtfi,
       DateTimeStyles styles) +2838082

Почему он не может разобрать дату на клиентской машине, когда она делает на моем виртуальной машине? Дата заканчивается. Я не понимаю, как это может происходить. Я подтвердил, что клиент имеет 3,5, и если я изменю эту строку, чтобы вернуть ложь всегда, приложение отлично работает, за исключением того, что он не может сказать, когда истек.

Это было полезно?

Решение

DateTime.Parse Может неожиданно бросать формуетэксексуал, потому что это зависит от локали. С страницы MSDN:

Форматирование влияет свойства текущего объекта DateTimeFormatinfo, который по умолчанию получают из элемента региональных и языковых вариантов на панели управления.

Вы предпочитаете использовать DateTime.ParseExact.

Другие советы

Другой компьютер, вероятно, пытается проанализировать дату DD / MM / Yyyy из-за иметь другой регион. Вы должны быть в состоянии получить его разбираться, если вы ввели дату как «2010-10-20»

Антидоги указывают на точную причину проблемы. Но использование Parseexact гарантирует, что вы знаете точный формат и этот клиентский код придерживается этого формата.

В нашей системе разные клиенты из-за реализации требований к ошибкам отправляют нашему элементам нашего сервера, значения DateTime в двух разных культурах. Я обращаюсь с этим, используя следующий код:

private DateTime ParseWithDifferentCultures(string source)
{
    DateTime result;
    if (DateTime.TryParse(source, out result) 
        || DateTime.TryParse(source, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out result))
        return result;

    thrown new FormatException("Unrecognised DateTime format.");
}

Здесь, сначала мы пытаемся разбирать с использованием текущей информации о культуре, а затем с использованием инвариантной информации культуры. Конечно, это не идеально, но он идеально подходит для наших нужд.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top