在C#中将字符串转换为DateTime - 字符串未被识别为有效的DateTime

时间:2014-03-10 16:43:25

标签: c# datetime

我在这里回顾了这个问题:Convert string to datetime in C#.net

我试图传递的格式只是略有不同,但无法让它发挥作用。

我的代码:

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.

任何想法都将不胜感激! 谢谢!

3 个答案:

答案 0 :(得分:1)

问题在于本地化。

考虑以下三个陈述:

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)

第一个不起作用,而后两个会起作用。在这种情况下,这是因为PMfr-fr中无效。如果你试试这个:

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

它会正常工作。

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

答案 1 :(得分:0)

var dateString = "28/06/2012 06:04:10 PM";
DateTime dt = DateTime.ParseExact(dateString, "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);

答案 2 :(得分:0)

/是日期分隔符,可能在您的文化中,它不完全是/:可能会出现同样的问题,该问题将替换为当前的文化时间分隔符。尝试转义/:

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