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

Posted

技术标签:

【中文标题】将 dd/mm/yyyy 格式的字符串转换为日期时间 [重复]【英文标题】:Converting dd/mm/yyyy formatted string to Datetime [duplicate] 【发布时间】:2013-03-22 05:48:29 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

您需要使用DateTime.ParseExact 格式为"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 表示日和月。单 dM 适用于单位数/双位数日期和月份。所以对于d/M/yyyy 格式的有效值可能是:

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

如需进一步阅读,您应该查看:Custom Date and Time Format Strings

【讨论】:

非常感谢。我已经尝试过 DateTime.ParseExact() 但我想诀窍是使用 null 作为第三个参数。我使用的是 CultureInfo.InvariantCulture,这会给我一个编译错误。 @user1872530,不客气,它应该对你有用,但我猜你缺少使用 System.Globalization 的声明,所以试试System.Globalization.CultureInfo.InvariantCulture 谢谢。我正在使用“dd/MM/yyyy”并且“3/12/2016”解析失败,将其更改为“d/M/yyyy”,因为日期和月份值 如果字符串中包含时间,可以使用"dd/M/yyyy H:mm:ss"【参考方案2】:

使用DateTime.ParseExact

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)

【讨论】:

你应该使用“dd/MM/yyyy”而不是“dd/MM/YYYY”。【参考方案3】:

您可以使用"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

【讨论】:

以上是关于将 dd/mm/yyyy 格式的字符串转换为日期时间 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

python 将字符串格式的日期(DD.MM.YYYY)转换为Pandas中的日期格式

当str的格式为dd/mm/yyyy时,如何将列类型从str转换为日期?

将日期时间数据的数据框列转换为 DD/MM/YYYY 字符串数据

将 dd-MMM-YYYY 格式的日期转换为 JS 中的日期或 dd/mm/yyyy 格式

转换为日期格式 dd/mm/yyyy

将 mm/dd/yyyy 转换为 yyyymmdd (VB.NET)