为什么 DateTime.Now.TimeOfDay.ToString("HH:mm:ss.ffffff") 会抛出 FormatException?

22

我遇到了类似的问题,抛出了“FormatException”异常。我的代码只是:

void Orders_OnSubmit()
{
   DateTime CurrentTime = DateTime.Now;
   rtbAdd( "Submitted on " + CurrentTime.Date.ToString("MM/dd/yyyy") + " at " + CurrentTime.TimeOfDay.ToString("HH:mm:ss.ffffff") );
}

void rtbAdd(String S)
{
   DefaultDelegate del = delegate()
   {
      rtb.AppendText(S + "\n");
   };
   this.Invoke(del);
}

这里有什么问题?这是线程问题吗?


异常是在哪里抛出的? - Alastair Pitts
2个回答

33

TimeOfDayTimeSpan类型,它具有不同于DateTime格式选项。您还需要转义冒号(:)。

 currentTime.TimeOfDay.ToString("hh\\:mm\\:ss\\.ffffff") 

您的示例尝试使用"HH"格式,该格式定义为DateTime,但不适用于TimeSpan


3
不需要将时间从DateTime实例中分离出来。只需使用CurrentTime.ToString("HH:MM:ss.ffffff")即可。日期部分也是如此。 - Igby Largeman
非常感谢您详细而有帮助的回复! - user1935160
对于任何想要自定义输出像11:00 PM这样微不足道的内容的人来说,我发现这个自定义代码是唯一的方法:https://newbedev.com/how-to-convert-24-hour-format-timespan-to-12-hour-format-timespan - Guy Lowe

26

不需要明确访问DateTime实例的Date和TimeOfDay属性。 您可以像这样简化代码:

rtbAdd(String.Format("Submitted on {0:MM/dd/yyyy} at {0:HH:mm:ss.ffffff}", DateTime.Now));

2
太棒了!我在 MSDN 上阅读了两个小时,试着在代码中尝试了几种排列组合,但没有任何进展,只花了您几分钟的专业时间!再次感谢。 - user1935160

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接