【发布时间】:2020-04-11 08:33:48
【问题描述】:
我有一个老旧的 Windows 应用程序,其中 DateTime.TryParse(string value, out result) 被广泛使用。
以下代码在 Windows 7 和 Windows 10 上运行流畅。
// 下面是应用启动时完成的
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-AU");
var success = DateTime.TryParse("20 02", out result);
// 上面只是我们一直使用它的一种方式的一个例子。这里成功是真的,结果是 -> 20/02/2020 12:00:00 AM
但上述语句在 Windows Server 2012 R2 Standard 上执行时返回 false。
似乎 Win Server 2012 已经打破了
DateTime.TryParse。有趣的是,如果我使用.netFramework 3.5,那么它适用于所有操作系统。但我们使用的是框架 v4.6.2 (VS-2019)。
这是 Microsoft 操作系统或 .netFramework 4.6 中的错误吗?是否有任何现有的解决方法,而无需对代码进行任何更改,可能是 .net 框架补丁等。老实说,我很难对与此相关的代码进行任何更改,因为它的使用量超过 1.5k应用。
提前致谢!!!
【问题讨论】:
-
如果它真的在 10k 地方使用,也许你应该查找/替换
DateTime.TryParse->DateTime.TryParseX并提供你自己的扩展方法(或类似的)来处理这个......或切换到解析确切的路线。将两个数字放入日期解析例程中并希望它可以将一个用作日期,另一个用作当年的月份,这真的很糟糕 -
如果您在
DateTime.TryParse之前打印出CultureInfo.CurrentCultureInfo.DateTimeFormat.DateSeparator- 它们是否相同? -
@Cairus Jard - 我们正在尽力不更改代码,因为它曾经在其他操作系统中工作。 Windows Server 2012 R2 肯定有问题。
-
@Frank Nielsen - DateSepartor 在 Win Server 2102 上是“/”,这在 TryParse 工作的 Windows 10 中是相同的。
-
您的
windows 10/7和windows server 2012 R2在 excat 相同的 .net 框架上运行应用程序吗?
标签: c# .net windows-server-2012-r2