API方法。使用时区

时间:2011-06-28 17:54:49

标签: php api datetime timezone methodology

我正在开发一个API,我只是想知道是否有人可以就以下情况提出建议......

我的网络服务器时间已设置为UTC,PHP时区已设置为使用UTC。我的数据库中的所有时间都保存为unix时间戳,每个用户都与它们的时区一起存储在数据库中。

现在我的问题是......如果API使用用户存储的时区并在发送之前调整时间戳,或者它应该发送UTC时间戳并依赖于客户端在API调整之前要求调整API的时区用户?

其他主要API如何处理时间戳?

2 个答案:

答案 0 :(得分:1)

这实际上是一个非答案,但对您的API使用有意义的

无论好坏,许多服务总是只传达一个时区(主要是UTC)。如果这适用于应用程序,那么很好。

但是,如果时区具有任何含义,那么不发送信息显然是错误的,无论是单件(例如带有时区的日期字符串)还是分开但是并排(例如日期,时区)。

答案 1 :(得分:1)

我使用以下假设(在规范术语中):

  

API应该提供UTC日期时间,如果需要,客户端/消费者应该正确地对它们进行本地化。   API应该接受UTC日期时间,并且可以接受设置的本地化日期时间。

我始终按以下格式提供UTC RFC3339 ISO时间戳:YYYY-MM-DD HH:MM:SSZ。 API的响应可能如下所示:

{
  'title' : 'Foo',
  'due_date': '2011-12-13 12:00:00Z'
}

虽然我同时允许客户指定感知日期时间。所以我允许以下内容:

  1. http://api.example.com?title=Foo&due_date=2011-12-13 13:00:00+0100 - >转换为UTC并保存
  2. http://api.example-com?title=Foo&due_date=2011-12-13 12:00:00Z - > UTC
  3. 您可以使用UNIX时间戳使用相同的假设(我个人不想使用UNIX时间戳,因为它们确实有一个有限的开始(1970)和结束日期(2038))。

    如果要保存最初指定的时区;你应该分开存储它,但旁边。我最喜欢的东西是:

    {
      'title' : 'Foo',
      'due_date' : {
                    'utc': '2011-12-13 12:00:00Z',
                    'converted_from' : '2011-12-13 13:00:00+0100'
      }
    }
    

    如果您更喜欢UNIX时间戳:

    {
      'title' : 'Foo',
      'due_date' : {
                   'utc': 1326456000,
                   'original_offset' : 3600
      }
    }