DateTime.TryParse() 将德国日期转换为美国日期时出现问题

DateTime.TryParse() issue while converting German date to US date

目前我很难找到如何解决与 DateTime.TryPase 函数相关的问题

        String formattedDateString = String.Empty;

        // German date dd.mm.yyyy
        string dateString = "14.03.2016";
        DateTimeFormatInfo dateTimeFormat = null;

        //automatically throws and exception if the locale is not in the correct format
        CultureInfo fromCulture = new CultureInfo("en-US");
        DateTime tryParseDateTime;


        //automatically throws and exception if the locale is not in the correct format
        CultureInfo toCulture = new CultureInfo("de-de");
        dateTimeFormat = toCulture.DateTimeFormat;

        // expecting result to fail
        if (DateTime.TryParse(dateString, fromCulture, DateTimeStyles.None, out tryParseDateTime))
        {
            formattedDateString = tryParseDateTime.ToString("d", dateTimeFormat);
            Console.WriteLine("success");
        }
        else
        {
            Console.WriteLine("Failed");
        }

所以在我的代码中,我发送德语格式日期,即 dd.mm.yyyy 并期望 DateTime.TryParse 失败,但由于日期低于 1​​2,它假设有月份和 returns成功语句。

如果我传递德语日期“15.03.2016”,则一切正常。

我该如何解决这里的问题。

此处请求的语言环境是德语

谢谢

注意:提问者预计给定德语格式输入字符串的转换会失败。他只希望在输入字符串不是德语格式而是美国格式时转换成功。


使用 DateTime.TryParseExact 并传入源文化的预期格式。

    // German date dd.mm.yyyy
    string dateString = "01.03.2016";

    CultureInfo fromCulture = new CultureInfo("en-US");
    DateTime tryParseDateTime;

    // expecting result to fail
    if (DateTime.TryParseExact(dateString, fromCulture.DateTimeFormat.ShortDatePattern, fromCulture, DateTimeStyles.None, out tryParseDateTime))
    {
        MessageBox.Show("Success");
    }
    else
    {
        MessageBox.Show("Failed");
    }