vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 22
声望: 2

(转自百度知道)北京时间是属于东八时区bai的,英du文缩写 UTC+8。
北京时间并不是北京(东经116.4°)zhi的地方时间,而dao是东经120°(东八区)的地方时间,故东经120度地方时比北京的地方时早约14分半钟。因为北京处于国际时区划分中的东八区,同格林威治时间(世界时)整整相差8小时(即北京时间=世界时+8小时),故命名为“北京时间”。

测试代码:
from datetime import datetime, timedelta, timezone, time
from dateutil import tz, zoneinfo
import pytz
t = datetime.now().replace(tzinfo=timezone(timedelta(hours=8,minutes=6)))
print(t)
t = datetime.now(tz=timezone(timedelta(hours=8, minutes=6)))
print(t)
print(datetime.now())

输出:
2020-07-31 13:28:21.221145+08:06
2020-07-31 13:34:21.221145+08:06
2020-07-31 13:28:21.221145

我在使用生成带有时区信息的datetime对象时,只能用datetime.now().replace()的方式,其他的方式生成的有时区信息的datetime,要么是时区信息里面没有那个6分钟的,要么是有了那个6分钟,但是时间也会相应的加上这6分钟,,感觉这里使用的时区信息不严谨,不知道坛主是怎么生成这样的时区信息的

Member
avatar
加入于:
帖子: 526
声望: 24

没有问题的,环球时间戳是2.1.3就加上的了。
你可以用get_localzone函数获取你的本地时区,在中国的话应该就是”Asia/Shanghai“,然后用datetime里的replace就会加上+08:06的时间戳。如果想进一步了解各个接口怎么转换的,可以自己去对应的gateway去看一下。
如果你想要把现在这个本地时区的datetime转换成其他时区,然后出现了6分钟的时间差,你可以先用replace(tzinfo=None)去掉本地时区信息,然后再进行转换(比如normalize)试试看

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3