代码之家  ›  专栏  ›  技术社区  ›  Gianluca Ghettini

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

  •  0
  • Gianluca Ghettini  · 技术社区  · 9 年前

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

    我的要求是在任何情况下指定时区(甚至+00:00)

    现在,我使用的格式是:

    jsonSerializerSettings.DateFormatString = "o";
    

    它使用ISO标准和“Z”来指定UTC。

    不幸的是,我的web应用程序不理解这样的约定(我的意思是,最后的“Z”),它要求时区偏移在任何情况下都存在。 换句话说,我想用“+00:00”代替“Z”。

    我怎么知道 网络API 使用这种惯例?

    以前我有:

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

    它没有时区信息。

    2 回复  |  直到 9 年前
        1
  •  3
  •   Tomas Aschan    9 年前

    这并不像人们想象的那么容易——主要是因为 DateTime 类型为 confusing at its best, and wrong at its worst .

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

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

    i、 e.硬编码 +00:00 那里,自从你 知道 (假设)将是UTC。

        2
  •  0
  •   Igor    9 年前

    使用 System.DateTimeOffset 而不是使用 System.DateTime 在您的退货声明中(好的)。这将自动附加 +00:00 序列化字符串( +00:00假设是UTC时间点 ).

    对于Web API 2和更高版本,我不确定以前的版本

    这也是其他Web API扩展(如oData)的默认日期/时间格式。