【发布时间】:2018-10-14 10:51:21
【问题描述】:
我有以下代码,它将许多其他字符串格式转换为有效的日期时间格式。
try
{
outputDate = DateTime.Parse(inputDateTime);
}
catch
{
outputDate = DateTime.Parse(inputDateTime, new CultureInfo("en-US"));
}
但是对于以下两种情况它总是失败
13-10-2018 05:00:27的GetValidDateTimeFromString 错误-> 字符串未被识别为有效的日期时间。在 System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles 样式) 在 O365InventoryApp.InventoryDataUtility.GetValidDateTimeFromString(字符串 inputDateTime,TextWriter 日志)
14-10-2018 00:57:21 的GetValidDateTimeFromString 错误-> 字符串未被识别为有效的 DateTime。在 System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles 样式) 在 O365InventoryApp.InventoryDataUtility.GetValidDateTimeFromString(字符串 inputDateTime,TextWriter 日志)
注意突出显示的两个日期在转换时抛出异常。我认为这是一个 24 小时格式问题。所以我也尝试如下转换
log.WriteLine("GetValidDateTimeFromString error for " + inputDateTime + "-> " + ex.Message + ex.StackTrace);
CultureInfo provider = CultureInfo.InvariantCulture;
DateTimeStyles style = DateTimeStyles.None;
string[] format = new string[] { "dd-MM-yyyy h:m:s tt", "dd-MM-yyyy hh:mm:ss tt" };
DateTime dt;
if (DateTime.TryParseExact(inputDateTime, format, provider, style, out dt))
{
log.WriteLine("updated date -" + dt);
outputDate = dt;
}
谁能告诉我这里发生了什么?
【问题讨论】:
-
您最好使用
[Try]ParseExact而不是Parse,因为.NET 不必弄清楚您指的是哪种格式。