我正在尝试这种DateTime.TryParseExact方法,而且我遇到了一个我不明白的案例.我有一些格式和一些主题要解析每个格式应完全匹配其中一种格式:
var formats = new[]
{
"%H",
"HH",
"Hmm",
"HHmm",
"Hmmss",
"HHmmss",
};
var subjects = new[]
{
"1",
"12",
"123",
"1234",
"12345",
"123456",
};
Run Code Online (Sandbox Code Playgroud)
然后我尝试解析它们并打印出结果:
foreach(var subject in subjects)
{
DateTime result;
DateTime.TryParseExact(subject, formats,
CultureInfo.InvariantCulture,
DateTimeStyles.NoCurrentDateDefault,
out result);
Console.WriteLine("{0,-6} : {1}",
subject,
result.ToString("T", CultureInfo.InvariantCulture));
}
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
1 : 01:00:00
12 : 12:00:00
123 : 00:00:00
1234 : 12:34:00
12345 : 00:00:00
123456 : 12:34:56
Run Code Online (Sandbox Code Playgroud)
而我的问题是......为什么它在123和12345失败了?不应该成为01:23:00和01:23:45吗?我在这里错过了什么?我怎么能像我期望的那样让它工作?
更新:所以,似乎我们可能已经弄清楚为什么这是失败的.似乎H实际上抓住两个数字,然后只留下一个数字,mm然后失败.但是,有没有人对如何更改此代码有一个好主意,以便我得到我想要的结果?
另一个更新:想想我现在找到了一个合理的解决方案.添加它作为答案.将在2天内接受它,除非其他人想出更好的一个.谢谢您的帮助!