1

我有一个代码,在运行良好的 PC 中看起来像下面的代码:

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

我把它复制到另一台机器上,它说有些东西指责日期转换是错误的。我必须做的是使用:

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

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

我说的是 Windows 本身的全局配置,它对我的​​程序有一些严格的例外。有人知道吗?

4

4 回答 4

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 版本。

于 2012-11-25T10:05:06.717 回答
0

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

于 2012-11-25T09:36:10.283 回答
0

如果您的输入始终相同(例如 en-us 格式)并且您想从用户日期和时间格式偏好中抽象出来,那么DateTime.TryParseExact这是一个很好的、正确的方法。

于 2012-11-25T09:37:07.970 回答
0

你可以试试这个来设置文化不变的日期时间: -

 using System.Globalization;
//...
 DateTime _datetime = DateTime.Now;
string _formattedDateTime = _datetime.ToUniversalTime().ToString("s", 
DateTimeFormatInfo.InvariantInfo) + "Z";
于 2012-11-25T09:38:23.357 回答