【问题标题】:c# datetime.parse handling german short names differently on different systemsc# datetime.parse 在不同系统上以不同方式处理德语短名称
【发布时间】:2021-05-18 13:04:38
【问题描述】:

我有一个在 Windows Server 2008R2 和 2012R2 上正确运行的 Web 应用程序。现在我迁移到 Windows Server 2019。转换来自前端系统的一些日期时出现问题。使用的代码如下...

pool.ExpirationDate = DateTime.SpecifyKind(DateTime.Parse(routePrams["ddlExpirationDate"]), DateTimeKind.Local);

routePrams 中的值为“17 Mrz 2021”。这在旧系统上运行正常,但在新系统上运行不正常。在 Windows 2019 服务器上,我收到以下异常...

The string was not recognized as a valid DateTime. There is an unknown word starting at index 3.

我还在两个系统上尝试了以下 PowerShell 测试...

[datetime]::Parse("17 Mrz 2021")

在旧系统上,这可以正常工作,并返回“Mittwoch, 17. März 2021 00:00:00”。但是在新服务器上它也会返回异常。

我检查了所有服务器上的区域设置,似乎都是一样的。是否有其他设置影响日期转换?

我错过了什么?

【问题讨论】:

  • 我在两个系统上都进行了测试。 [datetime]::Parse("17 März 2021") 在所有服务器上处理,但 [datetime]::Parse("17 Mrz 2021") 仅在旧服务器 (2008/12) 上正确处理。我在哪里可以告诉系统也正确处理短月份名称?
  • 在 Powershell 中使用 (Get-culture).DateTimeFormat 可以看到,在系统上,以下条目是不同的... 新: AbbreviatedMonthGenitiveNames : {Jan., Feb., März, Apr....旧: AbbreviatedMonthGenitiveNames:{Jan, Feb, Mrz, Apr...}
  • 你试过用ParseExact代替Parse吗?我从不使用后者 - 始终指定您期望的格式!
  • 是的,我这样做。但是这个应用程序不是我开发的,它非常庞大。所以目前我需要一种方法来配置它,以便它在新服务器上工作。在代码中更改这一点将是一项艰巨的任务......
  • 在控制面板中更改区域设置?

标签: .net windows datetime server


【解决方案1】:

在不同的操作系统版本上处理文化的方式似乎有所不同。见这里:Why did the es-MX date format change from Windows 7 to Windows 10?

因此,我使用正确的文化实施了 ParseExact 的解决方案,这很有效。应用程序的变化并没有那么大。

感谢您的回答。

【讨论】:

    猜你喜欢
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多