无法从字符串中解析日期时间

本文关键字:日期 时间 字符串 | 更新日期: 2023-09-27 18:11:53

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

如何解析该dt

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

无法从字符串中解析日期时间

使用自定义日期和时间格式字符串,使用 ParseExactTryParseExact

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

该字符串不能解析为俄语DateTime表示形式,因为俄罗斯区域性不使用 AM/PM,因此使用 CultureInfo.InvariantCulture 这是一种类似美国的区域性(它不表示特定的区域性,而是模仿 en-US 区域性(。

尝试改用ParseExact

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

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

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

为了避免运行时异常,请使用安全的 DateTime.TryParseExact(( 方法,它在解析不成功的情况下返回 false,而不是抛出 FormatException 异常

俄罗斯不使用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 来正常处理故障,而不涉及异常。

尝试这样的事情:

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