无法从字符串中解析DateTime

时间:2011-10-21 19:48:20

标签: c# .net string parsing c#-4.0

string dt = "10/25/2010 11:40:05 PM";
var currentThread = Thread.CurrentThread.CurrentCulture; //ru-RU
DateTime dateTime = DateTime.Parse(dt); //Exception!

如何解析dt

更新 在我的情况下,DateTime可以表示为"25.10.2010 11:40:05""10/25/2010 11:40:05 PM" 这些是“通用”方法来解析它而不改变CurrentCulture吗?

6 个答案:

答案 0 :(得分:5)

使用custom日期和时间格式字符串,使用ParseExactTryParseExact

DateTime dateTime;
DateTime.TryParseExact(
                       dt, 
                       "MM/dd/yyyy hh:mm:ss tt", 
                       CultureInfo.InvariantCulture,
                       DateTimeStyles.None,
                       out dateTime
                      );

由于俄罗斯文化不使用AM / PM,因此不能将字符串解析为俄语DateTime表示,因此使用CultureInfo.InvariantCulture这是一种类似于美国的文化(它代表没有特定的文化,但是以en-US为模型。

答案 1 :(得分:2)

请尝试使用ParseExact

DateTime myDate = DateTime.ParseExact("10/25/2010 11:40:05 PM", "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

答案 2 :(得分:1)

尝试DateTime.Parse(dt, CultureInfo.GetCultureInfo("EN-us"))

答案 3 :(得分:1)

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

为避免运行时异常使用安全DateTime.TryParseExact()方法,它会在解析失败而不是抛出FormatException异常

的情况下返回false

答案 4 :(得分:1)

俄罗斯不使用AM和PM作为他们的AM / PM指示符,这至少是一个原因会失败。另一个原因是俄罗斯可能不会使用“月/日/年”格式,据我所知,这种格式主要是美国的特点。 (我不记得俄罗斯的格式字符串;我记得最近的月份名字让我感到悲伤,但这是另一个故事...)

我个人明确将文化指定为不变文化,并明确指定格式字符串:

string text = "10/25/2010 11:40:05 PM";
string pattern = "MM/dd/yyyy hh:mm:ss tt";
DateTime dt = DateTime.ParseExact(text, pattern,
                                  CultureInfo.InvariantCulture);

如果合理地预计会失败,则应使用DateTime.TryParseExact来优雅地处理失败而不涉及异常。

答案 5 :(得分:0)

尝试这样的事情:

dateTime = DateTime.Parse(dt, CultureInfo.CreateSpecificCulture("en-US"));