我觉得我忽略了一些明显的东西:
我使用SO解决方案here在Django应用中实现了时区,看起来效果不错(例如,当用户更改时区时,Django的{% get_current_timezone as TIME_ZONE %}
和timezone.get_current_timezone.now()
会反映该更改)
然而,我有一个Django模型,它同时有一个简单的DateField
和TimeField
输入,我定义了一个property
来返回带日期和时间的格式化字符串,如下所示:
# imports
from django.db import models
import pytz
from django.utils import timezone
from django.template.defaultfilters import date as format_date
from django.template.defaultfilters import time as format_time
class MyModel(models.Model):
date = models.DateField(default=timezone.now, null=True, blank=True)
time = models.TimeField(default=timezone.now, null=True, blank=True)
...
@property
def datetime(self):
date_str = format_date(self.date, "j N Y")
time_str = format_time(self.time, 'g:i a')
return f"{date_str} at {time_str}"
我如何使字符串中返回的日期和时间更改为适合时区?(可以假设它们当前引用的是UTC。)我目前正在尝试使用time
字段。我尝试了以下两个函数来使时间感知:
pytz.utc.localize(self.time)
self.time.replace(tzinfo=pytz.UTC)
但是,每当我试图通过以下语句获取区域的后续时间时:
local_time = self.time.replace(tzinfo=pytz.UTC)
我得到错误:
"datetime. time"对象没有属性"astimezone"
编辑:我认为我应该一直使用的函数是
local_time = aware_time.astimezone(timezone.get_current_timezone())
但是同样的错误适用。
1条答案
按热度按时间f0ofjuux1#
如果你想操作时区,你需要使用
datetime
对象。此时,您就有了一个可感知的
datetime
对象,可以将其转换为另一个时区,并将其打印出来等。