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

Posted

技术标签:

【中文标题】将德国日期转换为美国日期时出现 DateTime.TryParse() 问题【英文标题】:DateTime.TryParse() issue while converting German date to US date 【发布时间】:2016-12-02 01:11:28 【问题描述】:

目前我很难找到如何解决与 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,它假定有月份并返回成功声明。

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

我怎样才能在这里解决我的问题。

这里请求的语言环境是德语

谢谢

【问题讨论】:

好吧,首先你要从美国文化中传递过来,我认为它应该是de-DE? 由于 OP 的错误而投票结束。 试试DateTime.ParseExact 请检查一下,我已经根据实际情况更新了示例。 【参考方案1】:

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


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

【讨论】:

这工作正常,当我们通过日期时间模式时结果失败

以上是关于将德国日期转换为美国日期时出现 DateTime.TryParse() 问题的主要内容,如果未能解决你的问题,请参考以下文章

将时间戳转换为特定时区然后在 bigquery 中将其转换为日期时出现问题

在 SQL Server 中将字符串转换为日期

DateTime.Parse 美国日期格式 C#

如何在 SQL Server 中将字符串转换为日期时间?

将字符串转换为日期时间对象

C# 将 DateTime 转换为 Sql Server 2005 格式