关于C#:将dd/mm/yyyy格式的字符串转换为日期时间

Converting dd/mm/yyyy formatted string to Datetime

本问题已经有最佳答案,请猛点这里访问。

我对dotnet和c不熟悉。我想将mm/dd/yyyy格式的字符串转换为DateTime对象。我尝试了如下解析函数,但它抛出了一个运行时错误。

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

我可以把它转换成日期时间吗?


您需要将DateTime.ParseExact与格式"dd/MM/yyyy"一起使用。

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

如果您使用d/M/yyyy作为格式,则更安全,因为它将处理单位数和双位数的日/月。但这真的取决于您是否需要单/双数字值。

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

1
DateTime dt = DateTime.Parse("24/01/2013", new CultureInfo("en-CA"));

1
2
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

1
2
3
4
5
6
7
8
9
10
11
12
13
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"
  • "2013年4月12日"//2013年12月4日
  • "04/12/2013"

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


使用DateTime.ParseExact

1
2
string strDate ="24/01/2013";
DateTime date = DateTime.ParseExact(strDate,"dd/MM/YYYY", null)
  • 日期时间.parseexact

null将使用当前的文化,这有点危险。尝试提供特定的文化

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


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

Converts the specified string representation of a date and time to its
DateTime equivalent using the specified format and culture-specific
format information. The format of the string representation must match
the specified format exactly.

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

这是一个DEMO

有关更多信息,请查看Custom Date and Time Format Strings