首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python使datetime偏移量敏感

Python使datetime偏移量敏感
EN

Stack Overflow用户
提问于 2018-06-04 10:35:00
回答 3查看 1K关注 0票数 4

我想要获取datetime的偏移量,并生成一个感知字符串。

以下空闲代码可以正常工作:

Python 3.6.5 (default, Apr 1 2018, 05:46:30)

[GCC 7.3.0] on linux

代码语言:javascript
复制
import datetime
date_now = datetime.datetime.now()
date_now_with_offset = date_now.astimezone()
print(date_now_with_offset)
2018-06-03 17:48:50.258504-05:00

脚本中的以下代码显示错误:

代码语言:javascript
复制
import datetime
date_now = datetime.datetime.now()
date_now_with_offset = date_now.astimezone()
print(date_now_with_offset)

TypeError: Required argument 'tz' (pos 1) not found

我意识到时差和时区是不同的,但在任何给定的时刻,本地时间的偏移量都应该与准确的时区偏移量相同,即使时区偏移量在一年中可能会波动。

发生了什么?为什么?最佳解决方案是什么?

EN

回答 3

Stack Overflow用户

发布于 2020-11-07 18:13:54

如果datetime对象缺少时区,您可以使用以下命令添加该对象:

代码语言:javascript
复制
from datetime import datetime, timezone

datetime(1970,1,1).replace(tzinfo=timezone.utc)

或在构造datetime对象时

代码语言:javascript
复制
datetime(1970,1,1).tzinfo==None                                                                                                                              
# Out: True
datetime(1970,1,1, tzinfo=timezone.utc).tzinfo                                                                                                               
# Out: datetime.timezone.utc

从3.2版开始提供timezone

在尝试计算时间差时,我在Python 3中遇到了类似的错误

代码语言:javascript
复制
d = "Tue 01 May 2018 10:34:15 -0000" # date string with timezone
dt = datetime.strptime(d, "%a %d %b %Y %H:%M:%S %z")                                                                                                         
dt                                                                                                                                                           
# datetime.datetime(2018, 5, 1, 10, 34, 15, tzinfo=datetime.timezone.utc)
dt - datetime(1970,1,1)
# TypeError: can't subtract offset-naive and offset-aware datetimes

解决方案:创建datetime时添加时区或修改已有datetime对象

代码语言:javascript
复制
dt.tzinfo    
# datetime.timezone.utc
dt - datetime(1970,1,1, tzinfo=timezone.utc)                                                                                                                    
# datetime.timedelta(days=17652, seconds=38055)

# or modify already existing datetime 
d_aware = datetime(1970,1,1).replace(tzinfo=timezone.utc)
dt - d_aware
datetime.timedelta(days=17652, seconds=38055)

根据需要/根据您对缺少时区的了解,在您的日期中定义时区。

只需注意:datetime(1970,1,1, tzinfo=timezone.utc)Epoch time (or POSIX/Unix time),并且根据定义具有UTC时区。

票数 2
EN

Stack Overflow用户

发布于 2018-06-04 10:48:25

脚本正在由python2解释器执行。在脚本中添加一个显式的python3 shebang:

代码语言:javascript
复制
#! /usr/bin/env python3

import datetime
....
票数 1
EN

Stack Overflow用户

发布于 2020-11-10 05:40:15

概述:您可以将本地时间转换为其他时区,并使用astimezone显示新的时间。astimezone会将本地时间转换为时区日期时间。timezone.utc的时区偏移为0。astimezone更改时钟和utc偏移量。astimezone移动小时和天数以匹配时区。

代码语言:javascript
复制
from datetime import datetime, timedelta, timezone
print("Eastern Standard Time Zone")
ET=timezone(timedelta(hours=-5))
dt=datetime(2017,12,30,15,9,3)
print(dt.astimezone(ET))
print("India Standard Time Zone")
IST= timezone(timedelta(hours=5,minutes=30))
dt=datetime(2017,12,30,15,9,3)
print(dt.astimezone(IST))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50672785

复制
相关文章

相似问题

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