尝试解析DateTime时 - 类型' System.FormatException'的未处理异常发生在mscorlib.dll中

时间:2014-05-27 12:55:58

标签: c# datetime

我想要减去两个不同的日期,但是当我尝试显示减去的值时,它会与标题中的消息 - 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(),它可以正常工作,但这不是我想要的格式。

2 个答案:

答案 0 :(得分:4)

由于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);

答案 1 :(得分:1)

您应该使用:

(newTime - startingTime).ToString("c")

它将TimeSpan格式化为hh:mm:ss。由于此默认格式不区分区域性,因此无需传递CultureInfo

或者,为了避免毫秒问题(只是Soner更好的第二个答案的替代方案):

TimeSpan.FromSeconds(Math.Floor(newTime - startingTime.TotalSeconds)).ToString("c")