【问题标题】:.net core date format on LinuxLinux 上的 .net 核心日期格式
【发布时间】:2018-09-26 19:37:23
【问题描述】:

我正在将我的代码从 .net 框架迁移到 .net 核心并在 Linux 机器上对其进行测试,我遇到的问题之一是调用 DateTime ToString() 函数时的日期格式,在 Windows 中是默认值日期格式由操作系统引导,并且可以在我尝试在 Linux 中执行类似操作的设置中进行自定义,方法是定义具有所需格式的新语言环境文件并设置适当的变量 (LC_Time)。当向系统询问日期时,我得到了所需格式的答案,但是在运行代码时,我仍然得到“错误”的答案。我错过了什么吗?

【问题讨论】:

  • 为了让事情更简单,格式为 MM/dd/yyyy,我正在尝试将其更改为 dd/MM/yyyy
  • 如果您尝试直接在 ToString() 调用中指定语言环境怎么办?
  • 关于 dd/MM/yyyy 使用“en-GB”而不是“en-US”。从您最初的问题中并不清楚这一点。
  • 调用 ToString(dd/MM/yyyy) 有效,但不幸的是在我的情况下不是解决方案
  • 虽然我没有尝试“en-GB”或任何其他预制语言环境,但我确实复制了“en-US”文件更改了 d_fmt 并更改了环境变量以引用它。现在我知道它起作用了,因为系统中的格式确实发生了变化(例如在询问日期时)

标签: c# .net linux .net-core


【解决方案1】:

老问题,但我刚刚遇到了这个问题。这是 .NET Core 2 的 "bug / feature / expected behavior"...

发生这种情况是因为 en-US(在 Linux 上)的默认短日期是 M/d/yy。确定默认短日期的方式是代码

https://github.com/dotnet/coreclr/blob/master/src/corefx/System.Globalization.Native/calendarData.cpp#L527

https://github.com/dotnet/coreclr/blob/master/src/corefx/System.Globalization.Native/calendarData.cpp#L281

使用的默认短日期模式是从该枚举返回的第一个模式,看起来 ICU 为 KShort 返回了什么

但是,它会根据pull request在 .NET Core 3 中更改/修复:

我尝试使用 dotnet core build pack 2.1.3,它没有解决我的格式 d 问题(仍然是 7/6/18),请您帮我解决同样的问题。提前致谢

这在 3.0 中已修复。出于应用兼容性的原因,我们没有更改 2.1 的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2019-08-29
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多