当尝试解析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)); 

我也尝试使用TimeSpannewTime.Subtract(startingTime),但返回相同的异常。

异常只发生当我试图解析它在我的格式- HH:mm:ss。如果我只使用ToString(),它工作得很好,但这不是我想要的格式。

当尝试解析DateTime时—类型为'System.FormatException'的未处理异常发生在m

因为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")