2013-02-11 6 views
0

В моем приложении Django У меня Task модели с некоторыми полой датой и времени:Как передавать данные времени между различными зонами?

class Task(models.Model): 

    date = models.DateField() 
    start_time = models.TimeField(help_text='hh:mm') 
    end_time = models.TimeField(help_text='hh:mm') 
    # more stuff 

Я пришлю некоторые Task экземпляров для некоторых Android клиентов, которые будут находиться в часовом поясе (TZ1) отличается от мой часовой пояс сервера (TZ2).

The start_time и end_time полей должны быть установлены на целевой временной зоне (TZ1), т.е. если ввести '13: 00' в поле start_time в Task администратора, оно должно быть '13: 00' в TZ1.

Как установить значения start_time и end_time в TZ1 раз? Если я оставлю значения, введенные администратором по умолчанию, я думаю, что время будет установлено на часовой пояс сервера (TZ2), правильно?

Тогда какой лучший формат для отправки этих значений (через JSON) клиентам Android, чтобы получить правильное время TZ2?

Теперь я использую Python Datetime-х isoformat(), что дает что-то вроде

2013-02-11T13:17:23.811680 

но не имеет никаких данных часовых поясов ...

ответ

1

Это не самый лучший способ справиться с часовыми поясами.

Лучший способ - как можно быстрее конвертировать время в UTC и конвертировать их как можно позже.

Другими словами, если я ввожу текущее время здесь Feb 11, 21:03, то оно должно быть никогда не должно быть. Вместо этого он должен быть изменен на UTC до что-нибудь иначе происходит.

Это так, что бы ни случилось с этим, это правильно. Если я отправлю его во Внутреннюю Монголию, он должен оставаться в формате UTC до тех пор, пока кто-то не захочет посмотреть на него. Затем и только тогда он должен быть преобразован (и только для отображения).

Следуя этому правилу, вы сэкономите много горя в любом программном обеспечении, которое должно работать в нескольких часовых поясах. Поверьте мне, мы исправили крупный Telco после того, как они внедрили какую-то отвратительную систему, которая отправила часовые пояса через провод, что означает, что каждый пункт должен был иметь возможность конвертировать в каждый часовой пояс.

Получение их в UTC как можно быстрее, и только возврат их обратно по требованию, сохранение веток времени и денег.

Смежные вопросы