美文网首页
在序列化JSON的时候如何防止Date和DateTime丢失信息

在序列化JSON的时候如何防止Date和DateTime丢失信息

作者: elef | 来源:发表于2018-08-29 11:36 被阅读10次

    在构建 api 时, 使用 JSON 作为序列化格式非常常见。JSON 定义了布尔值、数字和字符串的序列化, 而没有日期(date)/日期时间(datetime)数值。
    对于日期和日期时间值, 大多数序列化程序都使用 ISO8601 标准。例如:

    # Date format
    2011-07-14
    
    # DateTime format
    2011-07-14T19:43:37+0100
    

    但是, 您应该知道使用日期格式时信息丢失。这会发生, 因为不同时区之间的日期值可能不同。让我举个例子:

    • 从巴西 (UTC-0300) 2011-07-14 T01:00:00Z (utc) 发出请求到 UTC 服务
    • 如果创建请求的时间作为日期公开, 它将返回值为2011-07-14
      但从客户的角度来看, 在巴西, 正确的日期是 2011-07-13, 因为在这一请求发布的那一刻, 巴西当地时间是 2011-07-13 T22:00:00-0300
      如果此信息仅在您的应用程序内使用, 在同一时区内, 您将没有问题。但是, 如果您需要通过公共 API 提供此信息, 则 API 的一个用户可能会恢复不正确的值。
      因此, 从这一体验中, 将由不同客户端共享和使用的任何日期值都应用显式时区或 Unix 时间格式表示为日期时间。这样, 客户端就可以正确地处理数据了。
      下面是一个 API 的示例, 它以正确的方式返回订阅期间:
    {
      period_start_date: 1409175049, # Unix time
      period_end_date: 2014-09-27T18:30:49-0300 # ISO8601
    }
    
    # Time.at(1409175049)
    # DateTime.parse(“2014-09-27T18:30:49-0300”)
    

    上面的选项具有明确和适合的。你可以选择一个或另一个基于这个事实, 时区选项是更容易人类理解。但是请记住, 时区是一个呈现层问题, 因此, 如果您只需要传递数据, Unix 时间就更好了。

    摘自:
    http://blog.plataformatec.com.br/2014/11/how-to-serialize-date-and-datetime-without-losing-information/

    相关文章

      网友评论

          本文标题:在序列化JSON的时候如何防止Date和DateTime丢失信息

          本文链接:https://www.haomeiwen.com/subject/eouhwftx.html