C# 如何正确解析DateTime
我有以下方法:C# 如何正确解析DateTime,c#,datetime,tryparse,C#,Datetime,Tryparse,我有以下方法: private DateTime GetDateTimeFromString(string dateTimeStr) { try { return DateTime.Parse(dateTimeStr, CultureInfo.InvariantCulture); } catch (Exception ex) { _logger.Log(
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;
}
}
当我在VisualStudio中运行它时,它工作得很好。但当它部署到Azure时,它失败了。错误是:
分析2019年4月21日11:6:56时发生异常:未将字符串识别为有效的日期时间
我在调试器中坚持2019年4月21日11:6:56,它可以工作。欺骗。有人能帮忙吗
请注意,无论是否使用CultureInfo,它在Azure作为Web应用程序时都会失败
同样在Azure上,my web.config设置为:
<globalization culture="" uiCulture="" />
您可以尝试使用和设置解析格式
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,您可以处理它,而不是处理异常。如果输入字符串与格式和区域性不匹配。它将返回false。
确定区域性和日期时间格式参数。
像这样
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;
您可以尝试使用和设置解析格式
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,您可以处理它,而不是处理异常。如果输入字符串与格式和区域性不匹配。它将返回false。
确定区域性和日期时间格式参数。
像这样
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;
检查主机上的区域性设置。@MarkBenningfield,谢谢您的回复。这是一个网络应用程序。无论是否使用cultuerinfo参数,上述代码都会失败。我不认为DateTime.Parse21/4/2019 11:6:56,CultureInfo.InvariantCulture会成功-您确定显示了说明问题的代码吗?@AlexeiLevenkov,是的。这就是复制和粘贴。请检查主机上的区域性设置。@MarkBenningfield,谢谢您的回复。这是一个网络应用程序。无论是否使用cultuerinfo参数,上述代码都会失败。我不认为DateTime.Parse21/4/2019 11:6:56,CultureInfo.InvariantCulture会成功-您确定显示了说明问题的代码吗?@AlexeiLevenkov,是的。这就是复制和粘贴。非常感谢@D-shih。成功了。我想我试过TryParseExact方法,但我不知道我做错了什么,因为我遇到了错误。可能我没有使用DateTimeStyles。谢谢,现在一切都好了。@Stackedup没问题,很乐意帮忙小心外壳。hh是一个12小时的时钟。HH是24小时制。如果没有一个上午/下午的梅里迪姆指示器tt,那么一个12小时的时钟是没有用的,因为你无法分辨凌晨1点和下午1点之间的区别。非常感谢@D-shih。成功了。我想我试过TryParseExact方法,但我不知道我做错了什么,因为我遇到了错误。可能我没有使用DateTimeStyles。谢谢,现在一切都好了。@Stackedup没问题,很乐意帮忙小心外壳。hh是一个12小时的时钟。HH是24小时制。如果没有am/pm meridiem指示器tt,那么12小时时钟就没有用处,因为您无法分辨凌晨1点和下午1点之间的差异。