将 dd/mm/yyyy 格式的字符串转换为 Datetime

我是 DotNet 和 C # 的新手。我想把 mm/dd/yyyy格式的字符串转换成 DateTime对象。我尝试了下面的解析函数,但它抛出了一个运行时错误。

DateTime dt=DateTime.Parse("24/01/2013");

Any ideas on how may I convert it to datetime?

625455 次浏览

您需要使用格式为 "dd/MM/yyyy"DateTime.ParseExact

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

如果使用 d/M/yyyy作为格式,会更安全,因为它可以同时处理单位数字和双位数字的日/月。但是,这实际上取决于您是否期望单位数或双位数值。


您的日期格式 day/Month/Year可能是某些区域性可以接受的日期格式。例如,对于加拿大文化 en-CA DateTime.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调用提供任何区域性,因此当前区域性用于解析不支持日期格式的内容。请在 日期时间,解析阅读更多相关内容。


Another method for parsing is using DateTime.TryParseExact

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

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

注意 ,我分别使用单个 dM作为日和月。单个 dM适用于单/双位数字的日和月。因此,对于 d/M/yyyy格式,有效值可以是:

  • “2013年1月24日”
  • “2013年1月24日”
  • “4/12/2013”//4 December 20132013年12月4日
  • “2013年4月12日”

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

使用 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)

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

将日期和时间的指定字符串表示形式转换为 使用指定的格式和特定于区域性的 字符串表示形式的格式必须匹配 指定的格式。

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

这是 DEMO

要了解更多信息,请查看 Custom Date and Time Format Strings