2012-03-07 127 views
0

2/22/2012 3:30:00为什么这个字符串不会被转换为DateTime?

当然,这是一个可接受的格式转换为DateTime使用Convert.ToDateTime()?

+0

你可以发布你的代码,所以我可以看看 – bobthemac 2012-03-07 15:50:22

+0

你得到什么错误?我只是在Visual C#2010 Express中试过这个,它工作。这可能是其他地方的问题吗?请张贴出现问题的代码。 – Jetti 2012-03-07 15:51:40

+0

是的,它当然是。 http://ideone.com/DsXGZ你可以发布你的代码,以及你当前的语言环境吗? (不知何故,我知道@JonSkeet会回答SkonJeet关于这个特定主题的问题......) – Ryan 2012-03-07 15:51:44

回答

9

我会亲自避免使用Convert.ToDateTime。我通常更喜欢使用DateTime.TryParseExact,指定您期望的文化和格式字符串 - 当然,假设您有具有预期的格式。如果你不这样做,你必须问自己更大的问题。

例如:

DateTime value; 
if (DateTime.TryParseExact(text, "M/d/yyyy H:mm:ss", 
          CultureInfo.InvariantCulture, 
          DateTimeStyles.None, 
          out value)) 
{ 
    Console.WriteLine("Parsed to {0}", value); 
} 
else 
{ 
    Console.WriteLine("Failed to parse"); 
} 

这是一个有点奇怪的格式开始 - 通常是24小时制将包括小时以0开头,和12小时格式将包括AM/PM代号。


嗯,我喜欢使用Noda Time,但是这是一个不同的问题...

+5

从海报的名字来看,我相信他会很高兴能收到你的回复。 – Khan 2012-03-07 15:53:42

+3

所以'Jon Skeet'回答了Skon Jeet的问题! – tipycalFlow 2012-03-07 15:55:06

+0

哈哈确实,正确的答案,再次。谢谢Skon,errmm Jon。 – SkonJeet 2012-03-07 15:59:38

4

当然,这是一个可以接受的格式转换为DateTime使用Convert.ToDateTime()?

当然不是。对于某些语言环境会出现这种情况,但例如,我有一个fr-FR语言环境,这是无效的日期。今年没有22个月。确保在分析日期时指定格式。你可以使用TryParseExact这个方法。

+0

除了指定格式外,还可以通过使用'Convert.ToDateTime(string,IFormatProvider)'重载指定文化来克服文化不匹配。 – phoog 2012-03-07 16:01:07

0

它应该能够如果您提供的指定文化中的IFormatProvider(如恩美国在这种情况下)。

var date = Convert.ToDateTime("2/22/2012 3:30:00", CultureInfo.GetCultureInfo("en-US")); 
0

这对我来说很好:

  DateTime dt = Convert.ToDateTime("2/22/2012 3:30:00"); 
     Console.WriteLine(dt.ToShortDateString()); 
     Console.WriteLine(dt.ToShortTimeString()); 

当然,我不关注像达林暗示的本地化

1

如果您将年,月等信息分别作为整数获得,我宁愿使用DateTime的构造函数。

DateTime myDateTime = new DateTime(year, month, day, hour, minute, second); 

平时没事可以去错这个......