在Python中比较不同时区的同一时间

1 投票
1 回答
838 浏览
提问于 2025-04-19 17:51

我想每天早上7点给用户发送一封邮件。例如,用户1在美国洛杉矶的时区,而用户2在美国纽约的时区,他们会在各自的7点收到邮件,但用户1那边的时间是早上4点。

我的客户对象看起来是这样的:

class Customer(models.Model):
    user = models.OneToOneField(User, related_name="customer")
    first_name = models.CharField(max_length=128)
    last_name = models.CharField(max_length=128)
    reminder = models.TimeField(blank=True, null=True)
    time_zone = TimeZoneField()

我可以用这个方法获取用户所在时区的当前时间:

    now = datetime.now()
    settingstime_zone = timezone(settings.TIME_ZONE)
    now = settingstime_zone.localize(datetime.now())
    relative_time = now.astimezone(customer.time_zone)

这样我就能得到用户在他们时区的正确时间了。

接下来,我该怎么检查在那个时区是不是早上7点呢?

1 个回答

0

只需要检查一下日期时间对象的 hour 属性就可以了。

>>> from datetime import datetime
>>> from pytz import timezone
>>> 
>>> customer_time_zone = 'America/Los_Angeles'
>>> 
>>> #gets a non naive datetime (utc)
>>> utcnow = datetime.utcnow()
>>> utcnow = utcnow.replace(tzinfo=pytz.utc)
>>> 
>>> #localize current utc with customer_time_zone
>>> relative_time = utcnow.astimezone(timezone(customer_time_zone))
>>> utcnow, relative_time
(datetime.datetime(2014, 9, 4, 5, 41, 2, 294757, tzinfo=<UTC>), datetime.datetime(2014, 9, 3, 22, 41, 2, 294757, tzinfo=<DstTzInfo 'America/Los_Angeles' PDT-1 day, 17:00:00 DST>))
>>> relative_time.hour
22
>>> utcnow.hour
5

撰写回答