私はダイビング用のDjangoアプリを開発しており、各ダイビングは日時とタイムゾーンを持っています。私は、タイムゾーンのdjango-timezone-fieldアプリを使用しています。Djangoで指定されたタイムゾーンを使用して時間を表示
class Dive(models.Model):
...
date_time_in = models.DateTimeField(default=timezone.now)
timezone = TimeZoneField(default=timezone.get_current_timezone_name())
ので、ユーザは日時の文字列(「2016年7月11日14:00」)を入力し、タイムゾーン(「アジア/バンコク」 - UTC + 0700)を選択することができる、私は、タイムゾーンを設定しますデータベースは、その後、(SELECT文は私のローカルタイムゾーンでそれを与える)、データベースにUTCとして日時を保存する
def log_dive(request):
if request.method == 'POST':
form = DiveForm(request.POST)
if form.is_valid():
dive = form.save(commit=False)
date = dive.date_time_in
date = date.replace(tzinfo=None)
dive.date_time_in = dive.timezone.localize(date)
dive.save()
:今
# SELECT date_time_in, timezone FROM divelog_dive ORDER BY number DESC;
date_time_in | timezone
------------------------+------------------
2014-07-11 17:00:00+10 | Asia/Bangkok
次のように私の見解では与えられたものに日時の私が苦労している2つのことがありますith:
1)私は指定されたタイムゾーンで日付を表示したいが、TIME_ZONE設定をデフォルトにすることはできない。
2)ユーザーがレコードを編集した場合、編集フィールドに表示される時間は、元の時刻(14:00)に表示され、現在のタイムゾーン(17:00)に表示されます。
おかげで、私は今それを考え出した、私は投稿のコードでは、 '(=なしたtzinfo)置き換える'の後に日時、行を格納するための正しいですタイムゾーンをユーザーが選択したタイムゾーンに設定します(dive.timezoneはpytzタイムゾーンオブジェクトです)。 – xeonman9000