将dd/mm/yyyy格式的字符串转换为日期时间

123
我刚开始接触DotNet和C#。我想将一个以mm/dd/yyyy格式表示的字符串转换为DateTime对象。我尝试使用以下解析函数,但它会抛出运行时错误。
DateTime dt=DateTime.Parse("24/01/2013");

你有什么想法可以将它转换为日期时间吗?

3个回答

304
您需要使用 DateTime.ParseExact,格式为 "dd/MM/yyyy"
DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);

如果您使用d/M/yyyy格式,那么更安全,因为它可以处理单个数字和双位数字的日期和月份。但这真的取决于您是否期望单个或双位数字值。


对于某些文化来说,您的日期格式day/Month/Year可能是可接受的日期格式。例如,在加拿大文化中en-CADateTime.Parse将按以下方式工作:

DateTime dt = DateTime.Parse("24/01/2013", new CultureInfo("en-CA"));
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA");
DateTime dt = DateTime.Parse("24/01/2013"); //uses the current Thread's culture

两行代码都可以工作,因为字符串的格式可接受 en-CA 文化。由于您没有向 DateTime.Parse 方法提供任何文化信息,所以默认使用当前文化进行解析,而当前文化不支持该日期格式。有关详细信息,请参阅DateTime.Parse


另一种解析方法是使用DateTime.TryParseExact

DateTime dt;
if (DateTime.TryParseExact("24/01/2013", 
                            "d/M/yyyy", 
                            CultureInfo.InvariantCulture, 
                            DateTimeStyles.None,
    out dt))
{
    //valid date
}
else
{
    //invalid date
}

.Net框架中的TryParse方法组在解析无效值时不会抛出异常,而是返回一个表示解析是否成功的bool值。

注意:我在日和月上使用了单个的dM。单个的dM适用于单、双位数的日和月。因此,对于格式d/M/yyyy,有效值可以是:

  • "24/01/2013"
  • "24/1/2013"
  • "4/12/2013" //2013年12月4日
  • "04/12/2013"

如需进一步了解,请参阅:自定义日期和时间格式字符串


非常感谢。我已经尝试过DateTime.ParseExact(),但我猜问题在于第三个参数为空。我之前使用的是CultureInfo.InvariantCulture,这会导致编译错误。 - Fawad Shah
1
@user1872530,欢迎您。这应该对您有用,但我猜您可能缺少使用System.Globalization的语句,所以请尝试使用System.Globalization.CultureInfo.InvariantCulture - Habib
1
谢谢。我之前使用的是“dd/MM/yyyy”格式,但对于“3/12/2016”这样的日期解析失败了。将其改为“d/M/yyyy”格式后,由于日期和月份值小于10不再需要以零填充,因此解析成功了。 - ComeIn
如果字符串中包含时间,可以使用“dd/M/yyyy H:mm:ss”。 - Marisol Gutiérrez

22

使用 DateTime.ParseExact 方法

string strDate = "24/01/2013";
DateTime date = DateTime.ParseExact(strDate, "dd/MM/yyyy", null)

null会使用当前文化,这有一定风险。请尝试提供一个具体的文化。

DateTime date = DateTime.ParseExact(strDate, "dd/MM/yyyy", CultureInfo.InvariantCulture)

2
你应该使用“dd/MM/yyyy”而不是“dd/MM/YYYY”。 - Elie M

9
你可以使用"dd/MM/yyyy"格式,并在DateTime.ParseExact中使用它。

使用指定的格式和特定于文化的格式信息,将日期和时间的指定字符串表示形式转换为其DateTime等效项。 字符串表示形式的格式必须与指定的格式完全匹配。

DateTime date = DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);

这里有一个演示

更多信息,请查看自定义日期和时间格式字符串


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接