【问题标题】:DateTimeOffset.ToString() formatted output not consistent across envirosDateTimeOffset.ToString() 格式化输出在环境中不一致
【发布时间】:2021-08-27 18:50:07
【问题描述】:

我正在格式化与 Moneris 的定期计费集成的日期。该请求需要格式为“yyyy/MM/dd”的开始计费日期。简单的任务和“它在 Dev 中工作”。

当我将 API 代码发布到我们的暂存环境时,提交失败(来自 Moneris 的一个非常无助的错误,“系统或数据问题。请重试。”)。我已经确定它实际上是有争议的开始日期的日期格式。

在 Dev 中,输出如上所示,但是,在暂存时,输出格式为“yyyy-MM-dd”。这会破坏提交。我竟然用正确的格式硬编码一个值,它成功了。所以我们知道输出格式是有问题的差异。

我在 DateTime 上没有遇到任何其他 ToString("blah") 实例的问题。它与 DateTimeOffset 有关吗?为什么格式会放弃所指示的内容?

API 是 C# Asp.NetCore 3 解决方案。 开发环境:Windows 10 Pro 暂存环境:Windows Server 2019 标准版

【问题讨论】:

  • 至少贴出你用来创建字符串的实际代码!
  • 这能回答你的问题吗? Datetime acting weird on different computers
  • 如果您需要在每台机器上以每种语言都一致的固定日期格式,您必须提供(至少)格式字符串,以及(更好)相应的 CultureInfo
  • @gunr2171 虽然引用的问题以某种方式解决了日期的本地化问题,但我根本不推荐接受的答案,因为绝对不鼓励以这种方式构建 SQL 查询......

标签: c# asp.net-core-webapi tostring datetimeoffset


【解决方案1】:

在自定义DateTime 格式字符串中,未转义的/ 表示日期分隔符,这是特定于文化的。如果运行您的程序的机器配置了 en-US 文化,那么分隔符是 /,正如您所期望的那样。但是 ar-DZ 使用-,tr-TR 使用. 等(更多信息请参见here。)

为确保字符串始终使用/字符格式化,您需要对它们进行转义:

date.ToString(@"yyyy\/MM\/dd")

date.ToString("yyyy'/'MM'/'dd")

【讨论】:

  • 谢谢,我尝试强制使用“/”的文化,这也奏效了。 firstAutoChargeDate?.ToString("yyyy/MM/dd", new System.Globalization.CultureInfo("en-GB"))
  • @JesselAquing 是的,这也有效!虽然更冗长;)
猜你喜欢
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 2020-02-22
  • 2020-12-07
  • 1970-01-01
  • 2021-08-17
相关资源
最近更新 更多