我正在尝试将我的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
这样的数据库中。我想给用户一整天。我目前的时区是America / Chicago。我已经通过ip设置了活动时区。所以我想让它像用户可以从任何地方发布,但时区必须是UTC知晓的,并在午夜到期。任何人都可以告诉我如何才能实现这一目标?
答案 0 :(得分:1)
基于https://docs.djangoproject.com/en/1.8/topics/i18n/timezones/
的文档当启用对时区的支持时,Django将日期时间信息以UTC格式存储在数据库中,在内部使用时区感知日期时间对象,并将它们转换为模板和表单中最终用户的时区。
所以这一切都是完全没必要的,你需要做的就是像往常一样使用models.DateTimeField
。
您可以在视图或表单中定义Date
窗口小部件,然后在保存之前更改Time
DateTimeField
到23:59:59(或者您可以将其作为默认设置提供) )并且Django会在保存之前自动将其转换为UTC。
答案 1 :(得分:1)
我想做的是2015-12-01 23:59:59 utc
问题中的代码会返回当前时区的23:59:59
。
返回“23:59:59 UTC”而不是给定相应的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)