我想要获取datetime的偏移量,并生成一个感知字符串。
以下空闲代码可以正常工作:
Python 3.6.5 (default, Apr 1 2018, 05:46:30)
[GCC 7.3.0] on linux
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
脚本中的以下代码显示错误:
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
我意识到时差和时区是不同的,但在任何给定的时刻,本地时间的偏移量都应该与准确的时区偏移量相同,即使时区偏移量在一年中可能会波动。
发生了什么?为什么?最佳解决方案是什么?
发布于 2020-11-07 18:13:54
如果datetime对象缺少时区,您可以使用以下命令添加该对象:
from datetime import datetime, timezone
datetime(1970,1,1).replace(tzinfo=timezone.utc)
或在构造datetime对象时
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中遇到了类似的错误
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对象
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时区。
发布于 2018-06-04 10:48:25
脚本正在由python2解释器执行。在脚本中添加一个显式的python3 shebang:
#! /usr/bin/env python3
import datetime
....
发布于 2020-11-10 05:40:15
概述:您可以将本地时间转换为其他时区,并使用astimezone显示新的时间。astimezone会将本地时间转换为时区日期时间。timezone.utc的时区偏移为0。astimezone更改时钟和utc偏移量。astimezone移动小时和天数以匹配时区。
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))
https://stackoverflow.com/questions/50672785
复制相似问题