gpt4 book ai didi

django - 如何使 TimeField 时区感知?

转载 作者:行者123 更新时间:2023-12-04 07:28:23 25 4
gpt4 key购买 nike

有时您需要从用户那里收集时间而不收集相关日期。例如,如果用户正在配置每天同时运行的重复事件。 Django 的TimeField虽然不玩时区。但是,在这种特殊情况下(并且可能在您单独记录时间的任何时候),时区是一个重要因素。那么,如何存储时区感知时间?

最佳答案

答案是你没有。要使时间能够感知时区,它必须有一个与之关联的日期。想想夏令时...我的解决方案是使用 DateTimeField在模型上并像这样覆盖表单:

# Model
class MyModel(models.Model):
time_of_day = models.DateTimeField()

# Form Fields
from django.forms.util import from_current_timezone
from django.forms.util import to_current_timezone
from django.utils import timezone

class TzAwareTimeField(forms.fields.TimeField):
def prepare_value(self, value):
if isinstance(value, datetime.datetime):
value = to_current_timezone(value).time()
return super(TzAwareTimeField, self).prepare_value(value)

def clean(self, value):
value = super(TzAwareTimeField, self).to_python(value)
dt = to_current_timezone(timezone.now())
return dt.replace(
hour=value.hour, minute=value.minute,
second=value.second, microsecond=value.microsecond)


# Forms
class MyForm(forms.ModelForm):
time_of_day = TzAwareTimeField()

关于django - 如何使 TimeField 时区感知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19780082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com