与 DateTime.ParseExact 的短时间
Short Time with DateTime.ParseExact
我正在尝试解析时间。我在这里多次看到这个问题 asked/answered 但不是针对这种特定情况。这是我的代码:
var time1 = DateTime.ParseExact("919", "Hmm", CultureInfo.InvariantCulture);
还有
var time2 = DateTime.ParseExact("919", "Hmm", null);
这两个都抛出相同的
"String was not recognized as a valid DateTime"
我要的是9:19 AM
.
有关更多信息,我还需要将 “1305”
解析为 1:05 PM
,这工作正常。
在我看来,我使用的格式是正确的。我忽略了什么?
您不能排除小时的 0
前缀。这行得通
var time1 = DateTime.ParseExact("0919", "Hmm", CultureInfo.InvariantCulture);
也许您只想在解析前在 3 个字符的时间前加上一个前导零。
我不确定 是否有任何格式可以处理此问题。问题是 "H" 可以是一个数字或两个数字,所以如果有两个数字可用,它会抓取两个 - 在这种情况下将其解析为小时 91,这显然是无效的。
理想情况下,您可以将格式更改为 HHmm
- 在适当的地方对值进行零填充 - 这样“0919”就可以正常解析了。或者,在格式中使用冒号来区分小时和分钟。我不相信有任何方法可以让 DateTime
解析你想要的值“919”...所以你需要以某种方式调整字符串 在解析它之前。 (我们没有足够的上下文来推荐一种特定的方法。)
是的,你的格式是正确的,但由于 H
specifier 可能 是 2
字符,ParseExact
方法尝试解析 91
作为一个小时,这是一个无效的小时,这就是为什么在这两种情况下你都会得到 FormatException
。
4 个月前我就此情况联系了 Microsoft 团队。看看;
- DateTime conversion from string C#
他们建议在您的字符串中使用 2 位数字形式或在它们之间插入日期分隔符。
var time1 = DateTime.ParseExact("0919", "Hmm", CultureInfo.InvariantCulture);
或
var time1 = DateTime.ParseExact("9:19", "H:mm", CultureInfo.InvariantCulture);
非常感谢所有的回答。我无法控制正在创建的文本,因此对我来说最简单的解决方案似乎是在前面加上一个零,而不是在中间添加一个冒号。
var text = "919";
var time = DateTime.ParseExact(text.PadLeft(4, '0'), "Hmm", null);
我正在尝试解析时间。我在这里多次看到这个问题 asked/answered 但不是针对这种特定情况。这是我的代码:
var time1 = DateTime.ParseExact("919", "Hmm", CultureInfo.InvariantCulture);
还有
var time2 = DateTime.ParseExact("919", "Hmm", null);
这两个都抛出相同的
"String was not recognized as a valid DateTime"
我要的是9:19 AM
.
有关更多信息,我还需要将 “1305”
解析为 1:05 PM
,这工作正常。
在我看来,我使用的格式是正确的。我忽略了什么?
您不能排除小时的 0
前缀。这行得通
var time1 = DateTime.ParseExact("0919", "Hmm", CultureInfo.InvariantCulture);
也许您只想在解析前在 3 个字符的时间前加上一个前导零。
我不确定 是否有任何格式可以处理此问题。问题是 "H" 可以是一个数字或两个数字,所以如果有两个数字可用,它会抓取两个 - 在这种情况下将其解析为小时 91,这显然是无效的。
理想情况下,您可以将格式更改为 HHmm
- 在适当的地方对值进行零填充 - 这样“0919”就可以正常解析了。或者,在格式中使用冒号来区分小时和分钟。我不相信有任何方法可以让 DateTime
解析你想要的值“919”...所以你需要以某种方式调整字符串 在解析它之前。 (我们没有足够的上下文来推荐一种特定的方法。)
是的,你的格式是正确的,但由于 H
specifier 可能 是 2
字符,ParseExact
方法尝试解析 91
作为一个小时,这是一个无效的小时,这就是为什么在这两种情况下你都会得到 FormatException
。
4 个月前我就此情况联系了 Microsoft 团队。看看;
- DateTime conversion from string C#
他们建议在您的字符串中使用 2 位数字形式或在它们之间插入日期分隔符。
var time1 = DateTime.ParseExact("0919", "Hmm", CultureInfo.InvariantCulture);
或
var time1 = DateTime.ParseExact("9:19", "H:mm", CultureInfo.InvariantCulture);
非常感谢所有的回答。我无法控制正在创建的文本,因此对我来说最简单的解决方案似乎是在前面加上一个零,而不是在中间添加一个冒号。
var text = "919";
var time = DateTime.ParseExact(text.PadLeft(4, '0'), "Hmm", null);