首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何向datetime对象添加时区?

如何向datetime对象添加时区?
EN

Stack Overflow用户
提问于 2020-12-16 15:36:46
回答 1查看 3K关注 0票数 2

我有一个从文件中抓取date对象的变量。我的目标是向这个对象添加一个时区,这样它就可以根据它的日期自动更改时间。所以我希望它在夏季(3月到10月)添加+1hour,在冬季(10月到3月)添加+0hour

代码语言:javascript
代码运行次数:0
运行
复制
 dt_object =  '20200901-01u30m30s'    
 dt_object = datetime.datetime.strptime(dt_object, '%Y%m%d-%Hu%Mm%Ss') 

 >>>print(dt_object) >>> 2020-09-01 01:30:30 
                             
 timezone= 'Europe/Amsterdam'
 dt_object_tz = pytz.utc.localize(dt_object).astimezone(pytz.timezone(timezone))        
 timeDiff = dt_object_tz.utcoffset().total_seconds()
 official_time = pytz.utc.localize(dt_object_tz+datetime.timedelta(seconds=timeDiff))

 >>>print(official_time) >>> 2020-09-01 03:30:30+00:00 

正如你所看到的,这是一个9月的datetime对象(所以夏天!),我真的不知道为什么它增加了+2小时而不是1小时……有没有人能解释一下,告诉我出了什么问题?

我只希望我的datetime对象是时区感知的,这样它就可以根据grabs中的日期自动从夏季更改为冬季。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-16 15:54:42

关于pytz,请注意标准库中有zoneinfo。不需要第三方库来处理Python >= 3.9的时区。Example usage

然后,如果您的输入表示某个时区的挂牌时间,您可以只进行本地化。如果输入表示UTC,则可以更轻松地将tzinfo设置为UTC,然后使用astimezone将其转换为本地时间。

代码语言:javascript
代码运行次数:0
运行
复制
from datetime import datetime, timezone
import pytz

s = '20200901-01u30m30s'    
local_tz = 'Europe/Amsterdam'

# if s represents local time, just localize:
dtobj_tz = pytz.timezone(local_tz).localize(datetime.strptime(s, '%Y%m%d-%Hu%Mm%Ss'))
# datetime.datetime(2020, 9, 1, 1, 30, 30, tzinfo=<DstTzInfo 'Europe/Amsterdam' CEST+2:00:00 DST>)

# if s represents UTC, set it directly:
dtobj_utc = datetime.strptime(s, '%Y%m%d-%Hu%Mm%Ss').replace(tzinfo=timezone.utc)
# ...and convert to desired tz:
dtobj_tz = dtobj_utc.astimezone(pytz.timezone(local_tz))
# datetime.datetime(2020, 9, 1, 3, 30, 30, tzinfo=<DstTzInfo 'Europe/Amsterdam' CEST+2:00:00 DST>)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65319009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档