簡體   English   中英

如何使午夜和時區的Django模型日期時間字段數據可識別?

[英]How can I make django model datetime field data of midnight and timezone aware?

我試圖在我的Django模型中將expire_time設置為用戶選擇的日期的午夜,並且知道時區。 但是我無法正確獲取它。 誰能告訴我我該怎么做或我在代碼中哪里出錯了?

我的密碼是

date = datetime.strptime(str(request.POST.get('expire') + ', 23:59:59'),
                                     '%Y-%m-%d, %H:%M:%S')
            tz = timezone.get_current_timezone()
            date_tz = tz.localize(date)
            createEventInDB.ev_expire = date_tz

            try:
                createEventInDB.save()

            except Exception as e:
                error = e

因此,如果我選擇的日期是2015年12月1日,則它將發布為2015-12-1

我想將數據保存在2015-12-01 23:59:59這樣的數據庫中。 我想整天給用戶。 我當前的時區是美國/芝加哥。 我已通過ip設置了活動時區。 因此,我想讓用戶可以在任何地方發布信息,但時區必須是UTC感知的並且在午夜到期。 誰能告訴我如何實現?

基於https://docs.djangoproject.com/zh-CN/1.8/topics/i18n/timezones/上的文檔

啟用對時區的支持后,Django會將日期時間信息存儲在數據庫中的UTC中,在內部使用可識別時區的datetime對象,並將其以模板和形式轉換為最終用戶的時區。

因此,這完全是不必要的,您所需要做的就是像models.DateTimeField一樣使用models.DateTimeField

您可以在視圖或表單中定義一個Date小部件,然后在保存之前將DateTimeField Time更改為23:59:59(或者可以將其作為默認值提供),並且Django將在保存之前自動將其轉換為UTC。

我想做的是2015-12-01 23:59:59 UTC

問題中的代碼在當前時區返回23:59:59

如果給定了相應的UTC日期,則返回“ 23:59:59 UTC”更為簡單:

from datetime import datetime
import pytz

ev_expire = datetime(utc_date.year, utc_date.month, utc_date.day, 23, 59, 59,
                     tzinfo=pytz.utc)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM