111

我是 DotNet 和 C# 的新手。我想将mm/dd/yyyy格式中的字符串转换为DateTime对象。我尝试了下面的解析函数,但它引发了运行时错误。

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

关于如何将其转换为日期时间的任何想法?

4

3 回答 3

282

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

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呼叫提供任何文化,因此您当前的文化用于解析不支持日期格式的文化。在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月。SingledM适用于单/双位数的日期和月份。因此,对于格式,d/M/yyyy有效值可能是:

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

如需进一步阅读,您应该看到:自定义日期和时间格式字符串

于 2013-04-01T06:21:03.543 回答
15

采用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)
于 2013-04-01T06:21:40.173 回答
7

您可以使用"dd/MM/yyyy"格式在DateTime.ParseExact.

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

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

这是一个DEMO.

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

于 2013-04-01T06:22:38.583 回答