我正在开发一个API,我只是想知道是否有人可以就以下情况提出建议......
我的网络服务器时间已设置为UTC,PHP时区已设置为使用UTC。我的数据库中的所有时间都保存为unix时间戳,每个用户都与它们的时区一起存储在数据库中。
现在我的问题是......如果API使用用户存储的时区并在发送之前调整时间戳,或者它应该发送UTC时间戳并依赖于客户端在API调整之前要求调整API的时区用户?
其他主要API如何处理时间戳?
答案 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'
}
虽然我同时允许客户指定感知日期时间。所以我允许以下内容:
http://api.example.com?title=Foo&due_date=2011-12-13 13:00:00+0100
- >转换为UTC并保存http://api.example-com?title=Foo&due_date=2011-12-13 12:00:00Z
- > UTC 您可以使用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
}
}