栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Python计算时差

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Python计算时差

使用解析字符串

strptime()

a = time.strptime('2013-10-05T01:21:07Z', '%Y-%m-%dT%H:%M:%SZ')b = time.strptime('2013-10-05T01:21:16Z', '%Y-%m-%dT%H:%M:%SZ')

这会将给定的时间字符串解析为本地时间(将夏令时(DST)设置为自动),并且结果为时间结构。这些仍然反映DST是显式关闭(0),打开(1)还是隐式自动(-1)。将它们转换为浮点数(从1970-01-01开始的秒数):

a = time.mktime(a)b = time.mktime(b)

然后计算差异(以秒为单位):

d = b - a

并将它们转换为天/小时/分钟/秒:

days = int(d) / 86400hours = int(d) / 3600 % 24minutes = int(d) / 60 % 60seconds = int(d) % 60

最后一块仅适用于正差异,因此请注意不要交换

a
b
;-)

但是@JFSebastian正确指出这可能不是您想要的。从符号看来,您的字符串描述的是UTC时间,而不是本地时间。只是时间上的差异,以防您的时间跨过DST开关,这才有意义。在这种情况下,当然会导致时差过大一小时或过小一小时(因为UTC始终没有DST)。

为了避免这种情况,可以将DST标志从自动(-1)设置为固定值(例如0表示关闭),并使用以下值:

a = time.mktime(a[:-1] + (0,))  # switch DST to offb = time.mktime(b[:-1] + (0,))

或者,正如@JFSebastian指出的那样,您可能会忘记该

time
模块,而使用
datetime.datetime
不了解DST方面的模块:

a = datetime.datetime.strptime('2013-10-05T01:21:07Z', '%Y-%m-%dT%H:%M:%SZ')b = datetime.datetime.strptime('2013-10-05T01:21:16Z', '%Y-%m-%dT%H:%M:%SZ')

然后,结果是

datetime
可以直接减去的
timedelta
对象,以获得表示所需时差的对象。打印它会导致某事
0:00:05
,可能正是您所要的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/640597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号