语言: C#, .Net框架: 4.5,使用的方法: DateTime.ParseExact
因此,在我们的一个项目中,我们使用以下函数将字符串解析为DateTime:
private DateTime FormatDate(string date, string format)
{
try
{
IFormatProvider culture = new CultureInfo("en-US", true);
DateTime dt = DateTime.ParseExact(date, format, culture);
return dt;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
并将其称为:
DateTime startDate = FormatDate("01/17/2016", "M/d/yyyy");
在我们的3台PC上,当每台PC上的日期格式为dd / MM / yyyy时,此代码可以正常工作,但是在2台PC上,当它们的日期格式为dd-MMM-yy时,它会在尝试执行时产生错误ParseExact:
字符串未被识别为有效的DateTime。
即使使用dd-MMM-yy格式,它仍然在第三台PC上工作。 我比较了所有3台PC上的日期和时间设置,设置都相同,唯一的区别在于我们在第三台Visual Studio 2015上使用Visual Studio 2013的2台PC上。
例外详情:
消息:字符串未被识别为有效的DateTime。
InnerException:没有内部异常
Stack:at System.DateTime.ParseExact(String s,String format,IFormatProvider provider) at AssetTracking.PopUpWindows.AddItem_Warranty.MakeReminder(TrackersDataContext atdc,Items ni,string itemId)在d:\ Solutions \ Trackers \ Trackers \ PopUpWindows \ AddItem_Warranty.xaml.cs:第807行 在Trackers.PopUpWindows.AddItem_Warranty。<> c__DisplayClass8.b__3()在d:\ Solutions \ Tackers \ Trackers \ PopUpWindows \ AddItem_Warranty.xaml.cs:第685行
问题: 我不确定,这是问题的不同IDE部分吗?或者其他什么东西可以在某些PC上产生这个bug,而不是在其他具有完全相同的日期和时间设置的人身上产生这个bug?
答案 0 :(得分:0)
首先,你的异常处理被破坏了:
private DateTime FormatDate(string date, string format)
{
try
{
IFormatProvider culture = new CultureInfo("en-US", true);
return DateTime.ParseExact(date, format, culture);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
catch块中没有任何操作,所以它只是打破了栈跟踪。全部删除:
private DateTime FormatDate(string date, string format)
{
IFormatProvider culture = new CultureInfo("en-US", true);
return DateTime.ParseExact(date, format, culture);
}
第二点是,您提供的值实际上与您指定的模式dd-MMM-yy
不匹配。显然DateTime.ParseExact
函数抛出了一个适当的异常。以下是有效输入值的示例:
var startDate = FormatDate("11-Mar-16", "dd-MMM-yy");
如果您将月份视为数字,请删除额外的M
。