当尝试解析DateTime时—类型为'System.FormatException'的未处理异常发生在m
本文关键字:未处理 FormatException 异常 System DateTime 类型 | 更新日期: 2023-09-27 18:05:26
我想要减去两个不同的日期,但是当我试图显示减去的值时,它会随着标题- An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll
的消息崩溃。奇怪的是,我使用相同的方法时,试图显示DateTime
。
这是我的(编辑)代码:
//works fine
DateTime startingTime = DateTime.Now;
System.Windows.MessageBox.Show(startingTime.ToString("HH:mm:ss", CultureInfo.InvariantCulture));
Thread.Sleep(1000);
//works fine
DateTime newTime = DateTime.Now;
System.Windows.MessageBox.Show(newTime.ToString("HH:mm:ss", CultureInfo.InvariantCulture));
//EXCEPTION
System.Windows.MessageBox.Show((newTime - startingTime).ToString("HH:mm:ss", CultureInfo.InvariantCulture));
我也尝试使用TimeSpan
和newTime.Subtract(startingTime)
,但返回相同的异常。
异常只发生当我试图解析它在我的格式- HH:mm:ss
。如果我只使用ToString()
,它工作得很好,但这不是我想要的格式。
因为newTime - startingTime
返回的是TimeSpan
,并且它的格式与DateTime
不同。
- 标准时间跨度格式字符串
- 自定义时间跨度格式字符串
我相信这能行;
string.Format("{0:HH'':mm'':ss}", (newTime - startingTime))
但这适用于。net Framework 4+。如果你使用。net 3.5或更低版本,你可以使用;
TimeSpan ts = newTime - startingTime;
string.Format("{0:00}:{1:00}:{2:00}",
(int)ts.TotalHours,
ts.Minutes,
ts.Seconds);
你应该使用:
(newTime - startingTime).ToString("c")
将TimeSpan
格式化为hh:mm:ss
。由于此默认格式对区域性不敏感,因此不需要传递CultureInfo
.
或者,为了避免毫秒问题(只是Soner更好的第二个答案的替代方案):
TimeSpan.FromSeconds(Math.Floor(newTime - startingTime.TotalSeconds)).ToString("c")