DateTime解析的严格或类似选项

时间:2012-11-25 09:33:44

标签: c# .net datetime .net-4.0 datetime-parsing

我的代码看起来像下面的代码,运行良好的PC:

DateTime.Parse("10/10/2012");

我把它复制到其他机器上,它说了一些归咎于日期转换是错误的。 我必须做的就是使用:

DateTime.TryParseExact("10/10/2012", "dd/MM/yyyy", null);

有没有人知道c#中是否有任何配置或控制此类内容的机器? (或者两台计算机之间的.net版本可能不同?但我很确定它们在两台机器上都是相同的,因为我在两台机器上都使用了Visual Studio 2008.)

我在谈论Windows本身的全局配置,这对我的程序有一些严格的例外。有人知道吗?

4 个答案:

答案 0 :(得分:0)

解析日期时使用系统的当前区域性。我敢打赌,这两台机器有不同的文化。

答案 1 :(得分:0)

如果您的输入始终相同(例如en-us格式),并且您希望抽象出用户日期和时间格式偏好设置,则DateTime.TryParseExact是一种不错的正确方法。

答案 2 :(得分:0)

您可以尝试设置文化不变日期时间: -

 using System.Globalization;
//...
 DateTime _datetime = DateTime.Now;
string _formattedDateTime = _datetime.ToUniversalTime().ToString("s", 
DateTimeFormatInfo.InvariantInfo) + "Z";

答案 3 :(得分:0)

(您正在混合ParseExactTryParseExact。)

差异来自CultureInfo.CurrentCulture。世界各地以不同的方式写日期。

即使说ParseExact("10/10/2012", "dd/MM/yyyy", null)也可能有问题。你有没有尝试过第一次设置

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");

然后执行上述ParseExact?它会失败,因为DateSeparator在此文化中不是"/"。要解决它,要么说

DateTime.ParseExact("10/10/2012", @"dd\/MM\/yyyy", null)

或者说

DateTime.ParseExact("10/10/2012", "dd/MM/yyyy", CultureInfo.InvariantCulture)

第一个通过“转义”斜杠/来工作,因此它变成一个字面斜杠,并且不会转换为当前的DateSeparator。第二个是通过给出不变文化,我们知道DateSeparator确实是"/"

<强>增加:

如果您从未在代码中设置CurrentCulture,则其值取决于操作系统的区域和语言设置。我想你在运行Windows?详细信息可能取决于确切的Windows版本。