将德语日期转换为美国日期时发生DateTime.TryParse()问题

时间:2016-12-02 01:11:28

标签: c# .net datetime culture

目前我很难找到如何解决与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失败,但由于当天低于12,它假定有月份并返回成功语句。< / p>

如果我通过德国日期“15.03.2016”,这个工作正常。

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

此处请求的区域设置是德语

由于

1 个答案:

答案 0 :(得分:3)

注意:提问者希望转换失败并使用给定的德语格式输入字符串。当输入字符串不是德语格式但是采用美国格式时,他只希望转换成功。

使用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");
    }