我在使用django应用程序时DateTimeField遇到问题。这主要是因为DST时间更改。
我在2015年10月30日(上个夏令时)创建了一个活动。我创建了第一项活动的副本,该副本将于2015年11月6日(美国夏令时当天)
我申请timedelta了7天,所以将天数改为7+。但是我几个小时都没有使用timedelta。
由于节省日光,减少了一小时。我不需要这个。我只想有几个小时。我怎样才能做到这一点。?
我尝试过此方法,但没有帮助我。
请看这个截图

我的 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)
因为USE_TZ=True您总是处理有意识的日期时间,它代表了一个精确的时间点。一般来说,该时刻的显示方式会根据当前时区的不同而有所不同。有些时区有夏令时,有些则没有,所以一般来说,您无法存储日期时间,以便所有时区的所有用户都能看到您想要的时钟时间(即与正在复制的事件相同的时钟时间)。
我可以想到几个解决方法:
如果您只服务一个时区(即当前时区始终相同),您可以只在该时区进行算术。
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 并存储,然后转换回所需的本地时间进行显示。
您真正想要表示的是特定日期的特定时钟时间,而不是确切的时刻。因此,也许您根本不想使用感知日期时间。一种选择是设置USE_TZ=False,但这是您可能不想进行的全局性、影响深远的更改。另一种选择是为此字段使用不同的表示形式。例如,您可以使用 aDateField和 aTimeField来代替 a DateTimeField。
| 归档时间: |
|
| 查看次数: |
2205 次 |
| 最近记录: |