.NET WebAPI C# 中 OK() 函数中的 UTC 时区

UTC timezone in the OK() function in .NET WebAPI C#

我有一个 .NET WebAPI,其中 returns 一些日期为 JSON。 我正在使用 Ok() 函数,该函数获取 C# DateTime 列表并将它们转换为 JSON 数组。

我的要求是无论如何都要指定时区(甚至+00:00)

现在,我使用的格式是:

jsonSerializerSettings.DateFormatString = "o";

使用 ISO 标准和 "Z" 指定 UTC。

不幸的是,我的网络应用程序不理解这样的约定(我的意思是,最后的 "Z")并且它需要在任何情况下都存在时区偏移。 换句话说,我想使用 "+00:00" 而不是 "Z".

如何告诉 WebAPI 使用这样的约定?

之前我有:

jsonSerializerSettings.DateFormatString = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffzzz";

没有时区信息。

这并不像人们想的那么简单 - 主要是因为 DateTime 类型是 confusing at its best, and wrong at its worst.

我建议只处理服务器上的 UTC 日期(即假定任何传入日期为 UTC,将所有内容保存为 UTC 并在任何地方返回 UTC)并让您的客户决定是否需要对此做些什么(例如转换为正确显示的本地时间)。然后,它可以像设置

一样简单
jsonSerializerSettings.DateFormatString = "yyyy-MM-ddTHH:mm:ss.fff+00:00";

即在那里对 +00:00 进行硬编码,因为您 知道 (根据假设)它将是 UTC。

在您的 return 语句中使用 System.DateTimeOffset 而不是使用 System.DateTime (Ok)。这将自动将 +00:00 附加到序列化字符串(+00:00 假设它是 UTC 时间点 )。

Web API 2 及更高版本,我不确定以前的版本

这也是其他 Web API 扩展程序(如 oData)的默认 date/time 格式。