如何让django模型的datetime字段数据显示午夜和时区?

时间:2015-11-06 23:40:31

标签: python django date datetime

我正在尝试将我的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知晓的,并在午夜到期。任何人都可以告诉我如何才能实现这一目标?

2 个答案:

答案 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)