【发布时间】:2011-01-02 05:44:18
【问题描述】:
我正在尝试DateTime.TryParseExact 方法,但我遇到了一个我不明白的案例。我有一些格式和一些主题要解析,每个都应该完美匹配其中一种格式:
var formats = new[]
{
"%H",
"HH",
"Hmm",
"HHmm",
"Hmmss",
"HHmmss",
};
var subjects = new[]
{
"1",
"12",
"123",
"1234",
"12345",
"123456",
};
然后我尝试将它们全部解析并打印出结果:
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));
}
我得到以下信息:
1 : 01:00:00
12 : 12:00:00
123 : 00:00:00
1234 : 12:34:00
12345 : 00:00:00
123456 : 12:34:56
对于我的问题......为什么它在 123 和 12345 上失败了?那些不应该变成 01:23:00 和 01:23:45 吗?我在这里想念什么?我怎样才能让它像我期望的那样工作?
更新:所以,看起来我们可能已经弄清楚了为什么这会失败。似乎H 实际上是在抓取两位数,然后只为mm 留下一位,然后会失败。但是,有没有人知道如何更改此代码以获得所需的结果?
另一个更新: 认为我现在找到了一个合理的解决方案。添加它作为答案。将在 2 天内接受它,除非其他人想出更好的。感谢您的帮助!
【问题讨论】:
-
您在我的机器上的确切代码,打印上午和下午,并在其他情况下将 123 和 12345 解析为上午 12 点而不是下午。这有点奇怪,因为它没有任何意义。
-
Coincoin: ToLongTimeString 取决于当前的文化。写 ToString("HH:mm:ss") 来保持一致可能会更好。
-
@Coincoin:这可能是因为你在不同的文化中打印出来。我将更新我的代码以使其更加不变。
标签: c# .net datetime parsing datetime-format