2016-11-11 26 views
1

我从比赛中许多不同的格式(或多或少任何小时,分钟,秒和毫秒的组合)时的结果:DateTime.TryParseExact单个第二

  • 01:22:51.15
  • 22: 15.12
  • 15.0
  • 12:21
  • ...

我分析他们一个有效的格式列表,到目前为止所有的格式都可以工作,除了一个:单一的第二种格式,例如“5”。

出于某种原因,以下列表(包含“s”作为第一项)并不帮助我将字符串“5”解析为DateTime,但“25”仍可以正常工作。

var timeString = "5"; 
var timeFormats = new[] { "s", "s.f", "s.ff", "ss", "ss.f", "ss.ff", "m:ss", "m:ss.f", "m:ss.ff", "mm:ss", "mm:ss.f", "mm:ss.ff", "H:mm:ss", "H:mm:ss.f", "H:mm:ss.ff", "HH:mm:ss", "HH:mm:ss.f", "HH:mm:ss.ff" }; 
DateTime timeValue; 
DateTime.TryParseExact(timeString, timeFormats, null, DateTimeStyles.None, out timeValue); 

任何想法为什么这不工作,因为我期望它?还是有更清晰的方式来覆盖所有这些时间格式,而无需添加其他nuget包...? 干杯!

+0

我不认为这是太多的要求什么代码目前给你? “这不起作用”并不值得继续。 – Abion47

+0

您正在使用时间跨度。这就是'TimeSpan'的意思,而不是'DateTime'。 – Luaan

+0

对不起,我的意思是TryParseExact返回false。 –

回答

2

由于格式中只有一个字符,因此它被视为the Sortable standard format,而不是以秒为单位的自定义格式。

要更改此设置,请将自定义格式前缀为%字符,如"%s"中所述。见"Using single custom format specifiers"

另外,要认识到如果这些是比赛的实际经过时间,TimeSpan是比DateTime更合适的数据结构。切换时请小心,因为两个对象之间的所有格式化标记都不相同。特别是,TimeSpan使用h数小时,而不是H。见Custom TimeSpan Format Strings

+0

%s做了诡计,谢谢。我知道TimeSpan,但我必须将它作为DateTime存储在数据库中,因此将它解析为DateTime。 –

+2

您不应将其作为日期时间存储在数据库中。相反,应将其存储为总秒数或总毫秒数或您需要的任何精度。作为DateTime存储使用的是错误的类型,并可能导致错误。 –

相关问题