我正在開發用於記錄潛水的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),我然後設置時區
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()
然後,數據庫存儲日期時間爲UTC在數據庫(SELECT語句使得它在我的本地時區):
# 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
現在的日期時間在我看來,給這樣的一個有兩件事我正在掙扎着ith:
1)我想在給定的時區顯示日期,但我似乎無法阻止它默認爲TIME_ZONE設置。 2)如果用戶編輯記錄,編輯欄中顯示的時間應該是他們最初輸入的時間(14:00),而不是當前時區(17:00)顯示的時間。
感謝您的幫助克里斯,我現在已經想通了,我貼的代碼是用於存儲日期時間,線路後'替換(tzinfo =無)正確的'將時區設置爲用戶選擇的時區(dive.timezone是pytz時區對象)。 – xeonman9000