.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 格式。
我有一个 .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 格式。