.NET DateTime.Parse

时间:2009-12-08 23:21:40

标签: c# .net datetime parsing

当尝试在DateTime类上使用Parse方法时,我会抛出异常:

  

字符串未被识别为有效的DateTime。

  • 输出时,字符串显示为"26/10/2009 8:47:39 AM"
  • 此字符串是从正则表达式匹配的组中获取的。
  • 从此匹配组获取的所有字符串都不会解析为datetime。 (WTF?)

其他字符串的示例:

26/10/2009 8:47:39 AM
26/10/2009 8:00:41 AM
26/10/2009 7:48:35 AM

奇怪的是,我确信它在>__<

之前有效

7 个答案:

答案 0 :(得分:24)

将字符串解析为DateTime对象几乎总是一种痛苦。如果您确定他们将始终拥有您的示例所做的格式,那么这应该有效:

string input = "26/10/2009 8:00:41 AM";
DateTime dateTime = DateTime.ParseExact(input, "dd/MM/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);

答案 1 :(得分:11)

Parse考虑​​了区域设置(当前线程的文化)。因此,我使用ParseExact并使用不变文化(或您需要的文化,例如。en-US,明确指定正确的格式,用于AM / PM)。

答案 2 :(得分:3)

你可能正在使用错误的文化。这个月不能是26,所以这不是美国的时间戳。这虽然有效:

using System;
using System.Globalization;

class Program
{
    static void Main(string[] args)
    {
        DateTime dateTime = DateTime.Parse("26/10/2009 8:47:39 AM",
            CultureInfo.GetCultureInfo("en-GB"));
    }
}

答案 3 :(得分:2)

机器上的文化有变化吗? 26/10/2009是一个很好的英国约会,但美国约会不好(例如)

答案 4 :(得分:2)

使用culture作为参数调用DateTime.Parse()或使用日期,要解析的日期的确切格式以及文化调用DateTime.ParseExact():

DateTime.ParseExact()

答案 5 :(得分:1)

我是第二个@Lucero,Parse使用当前主题的文化信息等。另请参阅相反的方向:在此上下文中ToString question

答案 6 :(得分:0)

我必须解决来自其他系统的一些非常奇怪的日期格式...在此示例中,该格式适用于SPANISH格式...

string input="07/06/2019 07:01:54 p. m.";


public static DateTime ParseSpanishDate(string input)
{
    string normalized = input.Replace("a. m.", "AM").Replace("p. m.", "PM");
    normalized = normalized.Replace("12:00:00 AM", "00:00:00 AM");
    return  DateTime.Parse(normalized, CultureInfo.GetCultureInfo("es"));
}