【发布时间】:2020-07-16 16:02:53
【问题描述】:
我对 pytz 和夏令时有疑问。当我使用时区Europe/Berlin 时,它总是使用没有夏令时的时区偏移量。
小例子:
print(repr(pytz.timezone("Europe/Berlin")))
<DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>
# Should probably be something like <DstTzInfo 'Europe/Berlin' CET+2:00:00 DST>
# Usage
from django.utils import timezone
from datetime import datetime
datetime_now = timezone.now()
print(my_time)
# Result: 00:00:00
print(datetime.combine(datetime_now, my_time, tzinfo=timezone.get_current_timezone()))
# Result: 2020-04-04 00:00:00+01:00, should be 2020-04-04 00:00:00+02:00
我的用例的最小示例是闹钟。用户将时钟设置为06:00(不考虑时区),时钟应在当前时区的06:00 响起,即在夏令时时为06:00+02,否则为Europe/Berlin 时为06:00+01。
实现是一个 Django 模型,使用 django.models.TimeField 表示非感知时间(例如 06:00),我想通过创建一个包含当前日期和时间存储在TimeField。
我愿意接受有关时间对象的不同建议(例如使用或不使用django.utils.timezone),只要我可以创建可以相互比较的日期时间对象并使用 timedelta 对象(或一些类似方法)递增/递减.
另一个最小的例子(Django 仅用于获取当前时区):
from django.utils import timezone
import datetime
tz = timezone.get_current_timezone()
time_now = datetime.datetime.now(tz=tz)
clock_time = datetime.time(1,2)
combined_time = datetime.combine(time_now, clock_time, tzinfo=tz)
print(tz)
print(time)
print(time_now)
print(combined_time)
结果
Europe/Berlin
01:02:00
2020-04-12 18:50:11.934754+02:00
2020-04-12 01:02:00+01:00
【问题讨论】: