2024-04-26 07:19:09 发布
网友
在Python中,假设我的日期是2016年12月25日。如何在该日期创建一个支持时区的日期时间中午?
如果与Django的时区处理兼容,则可获得额外积分。
埃里克对this question的回答解释了为什么应该使用datetime.combine(),然后使用timezone.localize()。直接在date time.time实例上设置时区将不考虑日期,这可能会导致错误的结果(由于夏时制或历史转换)。datetime.combine()就是不聪明!
datetime.combine()
timezone.localize()
>>> import pytz >>> import datetime >>> d = datetime.date(2016, 12, 25) >>> t = datetime.time(12) >>> tz = pytz.timezone('US/Pacific') >>> tz.localize(datetime.datetime.combine(d,t)) datetime.datetime(2016, 12, 25, 12, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:00 STD>)
诀窍是首先将原始时间和日期转换为原始日期时间。然后可以将此原始日期时间转换为感知日期时间。
转换可以使用第三方包pytz(在本例中使用“欧洲/伦敦”时区)完成:
pytz
import datetime import pytz naive_time = datetime.time(0, 30) date = datetime.date(2016, 12, 25) naive_datetime = datetime.datetime.combine(date, naive_time) timezone = pytz.timezone('Europe/London') aware_datetime = timezone.localize(naive_datetime)
如果您在Django中执行此操作,并希望使用当前时区(如Django中配置的),则可以用调用make_aware来替换最后两行:
make_aware
from django.utils import timezone aware_datetime = timezone.make_aware(naive_datetime)
埃里克对this question的回答解释了为什么应该使用
datetime.combine()
,然后使用timezone.localize()
。直接在date time.time实例上设置时区将不考虑日期,这可能会导致错误的结果(由于夏时制或历史转换)。datetime.combine()
就是不聪明!诀窍是首先将原始时间和日期转换为原始日期时间。然后可以将此原始日期时间转换为感知日期时间。
转换可以使用第三方包
pytz
(在本例中使用“欧洲/伦敦”时区)完成:如果您在Django中执行此操作,并希望使用当前时区(如Django中配置的),则可以用调用
make_aware
来替换最后两行:相关问题 更多 >
编程相关推荐