为什么C#中的DateTime.TryParseExact没有按预期工作

时间:2018-06-08 16:44:11

标签: c#

当我尝试运行时

DateTime.TryParseExact(employeeHireDate, "mm/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dDate);

C#正在将DateTime转换为2015年5月5日的其他日期,即我即将通过05/05/2015。

任何帮助将不胜感激。

以下是我的代码:

static void Main(string[] args)
{
    string employeeHireDate = "05/05/2015";         
    DateTime dDate;
    var isDateValid= DateTime.TryParseExact(employeeHireDate, "m/d/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dDate);

    if (!isDateValid)
    {
        Console.WriteLine("Failed");
        Console.ReadLine();
    }
    else
    {
        Console.WriteLine("Success");
        Console.ReadLine();
    }
}

3 个答案:

答案 0 :(得分:4)

使用

DateTime.TryParseExact(employeeHireDate, "MM/dd/yyyy", 
    CultureInfo.InvariantCulture, DateTimeStyles.None, out dDate);

相反,使用资本"MM"mm是几分钟,MM是几个月(见documentation)。

答案 1 :(得分:3)

格式字符串中的小写m分钟。你想要一个大写M几个月。五分钟,没有指定月份值,意味着你最终得到一年中的第一个月。你需要这个:

DateTime.TryParseExact(employeeHireDate, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dDate);

以下是参考资料:

  

https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings

答案 2 :(得分:1)

当您使用TryParseExact时,它必须是确切的格式。 " 05/05/2015"匹配" MM / dd / yyyy"不是" m / d / yyyy"。

它应该是:

    var isDateValid= DateTime.TryParseExact(employeeHireDate, "MM/dd/yyyy",

 CultureInfo.InvariantCulture, DateTimeStyles.None, out dDate);

还要注意" mm"适用于Minute,你应该使用" MM"一个月。