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サーバーのタイム ゾーン (TZ2) とは異なるタイム ゾーン (TZ1) にある Android クライアントにいくつかのインスタンスを送信します。

start_timeおよびフィールドはターゲット タイム ゾーン (TZ1) に設定する必要があります。end_timeつまり、管理者のstart_timeフィールドに「13:00」と入力するTaskと、TZ1 では「13:00」になるはずです。

start_timeとのend_time値を TZ1 倍に設定するにはどうすればよいですか? デフォルトの管理者に入力した値をそのままにしておくと、時間がサーバーのタイムゾーン (TZ2) に設定されると思いますよね?

次に、これらの値を (JSON 経由で) Android クライアントに送信して正しい TZ2 時刻を取得するのに最適な形式は何ですか?

今、私はPython Datetimeの を使用してisoformat()います。これは次のようなものを提供します

2013-02-11T13:17:23.811680

しかし、タイムゾーンデータはありません...

4

1 に答える 1

1

これは、タイムゾーンを処理する最良の方法ではありません。

最善の方法は、時間をできるだけ早く UTC に変換し、できるだけ遅く戻すことです。

つまり、ここに現在の時刻を として入力すると、そのように保存されるFeb 11, 21:03ことはありません。代わりに、何かが起こる前に UTC に変更する必要があります。

そうだな、何があってもそれは正しい。内モンゴルに送信した場合、誰かが見たいと思う時点まで UTC のままにする必要があります。その場合にのみ、変換する必要があります (表示のみ)。

このルールに従うことで、複数のタイムゾーンで動作する必要があるソフトウェアで多くの問題を解決できます。それを信じてください。主要な通信会社がタイムゾーンをネットワーク経由で送信する恐ろしいシステムを実装した後、私たちは修正しました。つまり、すべてのポイントがすべてのタイムゾーンとの間で変換できる必要がありました。

それらをできるだけ早く UTC に戻し、オンデマンドでのみ戻すことで、時間とお金を大幅に節約できました。

于 2013-02-11T13:11:00.180 に答える