c# - 将 dd/mm/yyyy 格式的字符串转换为日期时间

标签 c# string datetime

<分区>

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

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

关于如何将其转换为日期时间有什么想法吗?

最佳答案

您需要使用 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 有效值可以是:

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

要进一步阅读,您应该看到:Custom Date and Time Format Strings

关于c# - 将 dd/mm/yyyy 格式的字符串转换为日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15738608/

相关文章:

mysql substring_index 反向

Python 日期时间 : how to keep whole `us(microsecond)` ?

python - 如何从 Python 中的日期时间对象计算年份分数?

c# - 什么会导致 FindControl() 抛出 NullReferenceException?

c# - 如何为 DateTime 参数设置默认值

c# - 如何使正则表达式匹配不区分大小写?

c# - IndexOf 与自定义 StringComparer

java - 通过接受字符串使用 for 循环打印模式

php - laravel 5 将日期和时间插入数据库

c# - 在 Visual Studio 中编辑的 Unity 脚本不提供自动完成功能