首页 > 解决方案 > DateTimeOffset.ToString() 格式化输出在环境中不一致

问题描述

我正在格式化与 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 Standard

标签: c#asp.net-core-webapitostringdatetimeoffset

解决方案


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

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

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

或者

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

推荐阅读