日期时间 ParseExact 异常。

3
var str = "00:00:00 02/01/1990";
var dt = DateTime.ParseExact(str, "hh:mm:ss dd/MM/yyyy", null);

以上代码抛出了一个异常:“String was not recognized as a valid DateTime.”

我原以为使用ParseExact并指定确切的格式就可以了,那么以上代码有什么问题吗?

编辑:

使用不变的文化解决了问题。感谢评论。

var dt = DateTime.ParseExact(str, "HH:mm:ss dd/MM/yyyy", CultureInfo.InvariantCulture);

你的目标框架版本是什么?似乎适用于4.0。 - NoviceProgrammer
即使在ParseExact()中,冒号和斜杠字符也会被替换为本地文化的时间和日期分隔符。因此,您必须指定一个文化来获得可重复的结果,例如不变的文化。 - Hans Passant
2个回答

1

通常情况下,在DateTime格式中,日期在时间之前。可以尝试以下代码:

var str = "02/01/1990 00:00:00";
var dt = DateTime.ParseExact(str, "hh:mm:ss dd/MM/yyyy", null);

编辑:好的,所以你可以用一个技巧来完成它:

var str = "00:00:00 02/01/1990";
var split = str.Split(new char[] { ' ' });
if (split.Length == 2)
    str = String.Format("{0} {1}", split[1], split[0]);
var dt = DateTime.ParseExact(str, "hh:mm:ss dd/MM/yyyy", null);

该程序正在从CSV文件中导入数据。在CSV文件中,格式为“00:00:00 02/01/1990”,而不是“02/01/1990 00:00:00”。这就是为什么我需要使用上述指定的格式的原因。 - cfbd

1

"hh"格式说明符用于12小时制的上午/下午时间,不支持“00”。尝试使用24小时制进行定义:HH:mm:ss dd/MM/yyyy


我在使用HH时遇到了相同的错误,"字符串未被识别为有效的日期时间。" - cfbd

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