这是我多次遇到的问题,我相信我错过了一些优雅的解决方案。
我在c#中有一些DateTime变量,它们来自各种SQL表/网站/ Web服务,通常作为字符串发送。问题在于,其中一些来源设置为英语(美国),而另一些设置为英语(英国)。对于其中一些我没有控制权,因为我非常希望将它们全部设置为一个文化或另一个文化。
直到现在,我一直在使用CultureInfo对象进行转换,以正确格式化它,例如:
CultureInfo ci = new CultureInfo("en-GB");
Convert.ToDateTime(inputDateTimeString, ci);
然而,最近才让我意识到,由于DateTime只是一个字符串,所以转换程序并不知道原始DateTime所在的文化(就像我说的,它可能是美式或英式)。
对于日期字符串,比如"06/15/2009",这没问题,因为转换会意识到“15”不能是月份。然而,一个日期字符串"06/07/2009"将总是有效的,但是,根据原始字符串是美式还是英式,它可能指的是不同的天和月。
有没有更好的通用DateTime处理方法来减少这些歧义?谢谢。
编辑: 看起来没有可靠的方法来总是将字符串转换为正确的格式,因为我的信息很有限。
这些DateTime字符串的一个来源是我无法控制的.dll文件。然而,我可以控制这个.dll使用访问存储信息的数据库的SQL登录。如果我改变此登录的语言设置为英式英语(它目前是美式英语),那么它会检索该格式的DateTime,还是没有任何效果?当然,我必须检查它是否破坏了其他任何内容,但它可能有效吗?