在C#中将字符串转换为日期时间-字符串未被识别为有效的日期时间

在C#中将字符串转换为日期时间-字符串未被识别为有效的日期时间,c#,datetime,C#,Datetime,我在这里回顾了这个问题: 我试图传递的格式只是略有不同,但无法使其正常工作 我的代码: var date = DateTime.ParseExact(@"28/06/2012 06:04:10 PM", @"dd/MM/yyyy hh:mm:ss tt", null); 因此,我尝试了上述问题中的示例代码: var date = DateTime.ParseExact(@"14/04/2010 10:14:49.PM", @"dd/MM/yyyy hh:mm:ss.tt", null); 那

我在这里回顾了这个问题:

我试图传递的格式只是略有不同,但无法使其正常工作

我的代码:

var date = DateTime.ParseExact(@"28/06/2012 06:04:10 PM", @"dd/MM/yyyy hh:mm:ss tt", null);
因此,我尝试了上述问题中的示例代码:

var date = DateTime.ParseExact(@"14/04/2010 10:14:49.PM", @"dd/MM/yyyy hh:mm:ss.tt", null);
那也不行。都给我

System.FormatException
String was not recognized as a valid DateTime.
任何想法都将不胜感激!
谢谢

问题在于本地化

考虑以下三种说法:

DateTime.ParseExact(@"14/04/2010 10:14:49.PM", @"dd/MM/yyyy hh:mm:ss.tt", new CultureInfo("fr-fr"))
DateTime.ParseExact(@"14/04/2010 10:14:49.PM", @"dd/MM/yyyy hh:mm:ss.tt", new CultureInfo("en"))
DateTime.ParseExact(@"14/04/2010 10:14:49.PM", @"dd/MM/yyyy hh:mm:ss.tt", CultureInfo.InvariantCulture)
第一种方法行不通,而最后两种方法行不通。在这种情况下,这是因为
PM
fr
中无效。如果您尝试以下方法:

DateTime.ParseExact(@"14/04/2010 10:14:49.", @"dd/MM/yyyy hh:mm:ss.tt", new CultureInfo("fr-fr"))
它会很好用的


正如评论中所指出的,其他文化可能在其他项目上失败
en za
使用了不同的日期分隔符,导致该分隔符失败。

/
是日期分隔符,在您的文化中可能不完全是。使用当前区域性时间分隔符替换的
也会出现同样的问题。尝试转义
/

var date = DateTime.ParseExact(@"28/06/2012 06:04:10 PM", @"dd\/MM\/yyyy hh\:mm\:ss tt", null);

我认为这是某种本地化问题。你是什么文化?你有没有试过用固定文化的东西?谢谢你,克里斯!如果我使用CultureInfo.InvariantCulture,似乎可以工作。使用CultureInfo.CurrentCulture中断,我不理解。当前的文化对我们很重要。en us的“PMDesignator”设置为“PM”,那么为什么仍会失败?en-za也是如此。因此,如果您使用
CultureInfo.CurrentCulture.Name
它会告诉您它是
en-us
?这似乎不正确,因为上面的语句如果显式地与
en-us
一起使用,对我来说是有效的。在en za的例子中,看起来可能是日期分隔符引起了问题。更改
-
/
区域性.DateTimeFormat.DateSeparator
)使其工作。这就是为什么需要指定文化。事实上,@Chris是正确的。PM指示符在当前文化(en-us)上似乎不起作用,而如果我简单地使用不变量文化,它就起作用了。。。。
var date = DateTime.ParseExact(@"28/06/2012 06:04:10 PM", @"dd\/MM\/yyyy hh\:mm\:ss tt", null);