Я использую следующую гипотезу (в спецификации lingo):
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
}
}