#c# #datetime #tryparse
#c# #datetime #попробуйте проанализировать
Вопрос:
У меня есть следующий метод:
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: Строка не была распознана как допустимая дата-время.
Я вставляю 21/4/2019 11:6:56 в отладчик, он работает. Запутался. Может кто-нибудь помочь, пожалуйста?
Пожалуйста, обратите внимание, что в Azure (как в веб-приложении) происходит сбой с CultureInfo или без него.
Также в Azure для моего web.config установлено значение:
<globalization culture="" uiCulture="" />
Комментарии:
1. Проверьте настройки языка на хост-компьютере.
2. @MarkBenningfield, спасибо за ответ. Это веб-приложение. Приведенный выше код завершается с ошибкой с параметром cultuerinfo или без него.
3. Я не думаю
DateTime.Parse("21/4/2019 11:6:56", CultureInfo.InvariantCulture)
, что это когда-либо удастся — вы уверены, что показываете код, который демонстрирует проблему?4. @AlexeiLevenkov, да. Это было точное копирование и вставка.
Ответ №1:
Вы можете попробовать использовать DateTime .Попробуйте выполнить синтаксический анализ и установить формат синтаксического анализа.
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
DateTime.TryParseExact
возвратbool
, вы можете обработать его вместо handleException
. если входная строка не соответствует формату и языку. он вернетсяfalse
.- Определите
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;
Комментарии:
1. Большое вам спасибо @D-shih. Это сработало. Я думаю, что я попробовал метод TryParseExact, но я не знаю, что я сделал не так, поскольку получал ошибку. Возможно, я не использовал DateTimeStyles . Спасибо, теперь все хорошо.
2. @Stackedup Нет проблем, рад помочь
3. Осторожно с корпусом.
hh
это 12-часовые часы.HH
составляет 24 часа. Без индикатора am / pm meridiem (tt
) 12-часовые часы бесполезны, так как вы не сможете определить разницу между 1 am и 1 pm.
Ответ №2:
string dateTimeStr = "2019-04-35";
DateTime dateTime;
if (DateTime.TryParse(dateTimeStr, out dateTime))
{
Console.WriteLine(dateTime);
}
else
{
Console.WriteLine("Invalid");
}