Django DateTimeField的Django DST时间更改问题

RMK*_*RMK 5 python django dst

我在使用django应用程序时DateTimeField遇到问题。这主要是因为DST时间更改。

我在2015年10月30日(上个夏令时)创建了一个活动。我创建了第一项活动的副本,该副本将于2015年11月6日(美国夏令时当天)

我申请timedelta了7天,所以将天数改为7+。但是我几个小时都没有使用timedelta。

由于节省日光,减少了一小时。我不需要这个。我只想有几个小时。我怎样才能做到这一点。?

我尝试过此方法,但没有帮助我。

django应用程序中的DST时区问题

请看这个截图 在此处输入图片说明

我的 models.py

from django.db import models
from datetime import timedelta

class Event(models.Model):

    name = models.CharField(max_length=100)

    created = models.DateTimeField(auto_now_add=True)

    start_date = models.DateTimeField()

    def __unicode__(self):
        return self.name


    def copy_event(self, add_days=timedelta(days=7)):

        start_date = self.start_date + add_days
        name = self.name +' (copy)'
        new_event = Event(name = name,created = self.created,start_date=start_date,)

        new_event.save()

        return new_event
Run Code Online (Sandbox Code Playgroud)

Kev*_*nry 5

因为USE_TZ=True您总是处理有意识的日期时间,它代表了一个精确的时间点。一般来说,该时刻的显示方式会根据当前时区的不同而有所不同。有些时区有夏令时,有些则没有,所以一般来说,您无法存储日期时间,以便所有时区的所有用户都能看到您想要的时钟时间(即与正在复制的事件相同的时钟时间)。

我可以想到几个解决方法:

  1. 如果您只服务一个时区(即当前时区始终相同),您可以只在该时区进行算术。

    from django.utils.timezone import localtime
    new_start_date = localtime(self.start_date) + add_days
    
    Run Code Online (Sandbox Code Playgroud)

    添加add_days将始终保持时钟时间相同(即不考虑 DST)。将new_start_date转换为 UTC 并存储,然后转换回所需的本地时间进行显示。

  2. 您真正想要表示的是特定日期的特定时钟时间,而不是确切的时刻。因此,也许您根本不想使用感知日期时间。一种选择是设置USE_TZ=False,但这是您可能不想进行的全局性、影响深远的更改。另一种选择是为此字段使用不同的表示形式。例如,您可以使用 aDateField和 aTimeField来代替 a DateTimeField