c# - 将dd / mm / yyyy格式化字符串转换为Datetime

这个问题在这里已有答案:

  • 将字符串转换为DateTime                                     13个答案

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

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

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

Fawad Shah asked 2019-09-09T22:43:22Z
3个解决方案
226 votes

您需要使用d,格式为d

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

如果您使用d格式,则更安全,因为它将处理单个数字和两位数的日/月。 但这真的取决于你是否期望单/双位数值。


您的日期格式d可能是某些文化的可接受日期格式。 例如加拿大文化M d的工作方式如下:

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

上述两行都可以使用,因为字符串的格式对于d文化是可接受的。 由于您未向M调用提供任何文化,因此您当前的文化用于解析不支持日期格式的文本。 在DateTime.Parse阅读更多相关信息。


另一种解析方法是使用d

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

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

请注意,我分别使用单个dM作为日期和月份。 Single dM适用于单日/双位日和月。 所以对于格式d/M/yyyy,有效值可以是:

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

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

Habib answered 2019-09-09T22:45:04Z
10 votes

使用null

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

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

DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", CultureInfo.InvariantCulture)
John Woo answered 2019-09-09T22:45:42Z
6 votes

您可以使用Custom Date and Time Format Strings格式在Custom Date and Time Format Strings中使用它。

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

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

这是一个Custom Date and Time Format Strings

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

Soner Gönül answered 2019-09-09T22:46:27Z
translate from https://stackoverflow.com:/questions/15738608/converting-dd-mm-yyyy-formatted-string-to-datetime