Как правильно сделать DateTime.Parse - PullRequest
1 голос
/ 21 апреля 2019

У меня есть следующий метод:

    private DateTime GetDateTimeFromString(string dateTimeStr)
    {
        try
        {
            return DateTime.Parse(dateTimeStr, CultureInfo.InvariantCulture);
        }
        catch (Exception ex)
        {
            _logger.Log($"Exception while parsing {dateTimeStr}: {ex.Message}.");

            return DateTime.Now;
        }
    }

Когда я запускаю это в Visual Studio, оно работает нормально. Но при развертывании в Azure происходит сбой. Ошибка:

Исключение при синтаксическом анализе 21/4/2019 11: 6: 56: Строка не была распознана как допустимый DateTime.

Втыкаю 21/4/2019 11: 6: 56 в отладчик, все работает. Обмануты. Может кто-нибудь помочь, пожалуйста?

Обратите внимание, что в Azure (в виде веб-приложения) происходит сбой с или без CultureInfo.

Также в Azure мой web.config имеет значение:

<globalization culture="" uiCulture="" />

Ответы [ 2 ]

4 голосов
/ 21 апреля 2019

Вы можете попробовать использовать DateTime.TryParseExact и установить формат разбора.

DateTime dt;

DateTime.TryParseExact("21/4/2019 11:6:56",
                       "dd/M/yyyy hh:m:ss",
                        System.Globalization.CultureInfo.InvariantCulture,
                        System.Globalization.DateTimeStyles.None,
                        out dt);

Есть две причины, по которым я бы использовал DateTime.TryParseExact вместо DateTime.Parse

  1. DateTime.TryParseExact возврат bool, вы можете обработать его вместо обработки Exception. если входная строка не соответствует формату и культуре. вернется false.
  2. Определить Culture и формат даты и времени быть параметрами.

вот так.

DateTime dt;

if(!DateTime.TryParseExact(dateTimeStr,
                       "dd/M/yyyy hh:m:ss",
                        System.Globalization.CultureInfo.InvariantCulture,
                        System.Globalization.DateTimeStyles.None,
                        out dt))
{
    _logger.Log($"Exception while parsing {dateTimeStr}");
    dt = DateTime.Now;
}

return dt;

c # online

0 голосов
/ 21 апреля 2019
    string dateTimeStr = "2019-04-35";
    DateTime dateTime;
    if (DateTime.TryParse(dateTimeStr, out dateTime))
    {
        Console.WriteLine(dateTime);
    }
    else
    {
        Console.WriteLine("Invalid");
    }
...