首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python没有正确计算闰秒?

Python没有正确计算闰秒?
EN

Stack Overflow用户
提问于 2014-01-09 17:55:25
回答 2查看 5K关注 0票数 12

我正在解析一些具有第二个时间戳日期时间2012-06-30T23:59:60.209215的数据。我使用了以下代码来解析该字符串并将其转换为datetime对象:

代码语言:javascript
复制
    nofrag, frag = t.split('.')
    nofrag_dt = datetime.datetime.strptime(nofrag, "%Y-%m-%dT%H:%M:%S")
    dt = nofrag_dt.replace(microsecond=int(frag))

Python文档声称这不应该是一个问题,因为%S接受[0, 61]。但是,我用上面的时间戳得到了这个错误。

代码语言:javascript
复制
nofrag_dt = datetime.datetime.strptime(nofrag, "%Y-%m-%dT%H:%M:%S")
ValueError: second must be in 0..59

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-09 19:16:20

这样做:

代码语言:javascript
复制
import time
import datetime 
t = '2012-06-30T23:59:60.209215'
nofrag, frag = t.split('.')
nofrag_dt = time.strptime(nofrag, "%Y-%m-%dT%H:%M:%S")
ts = datetime.datetime.fromtimestamp(time.mktime(nofrag_dt))
dt = ts.replace(microsecond=int(frag))
print(dt)

产出如下:

代码语言:javascript
复制
2012-07-01 00:00:00.209215
票数 1
EN

Stack Overflow用户

发布于 2014-01-09 19:35:58

says

与时间模块不同,datetime模块不支持闰秒。

时间字符串"2012-06-30T23:59:60.209215"表示时间是以UTC为单位的(这是目前的最后一次闰秒):

代码语言:javascript
复制
import time
from calendar import timegm
from datetime import datetime, timedelta

time_string = '2012-06-30T23:59:60.209215'
time_string, dot, us = time_string.partition('.')
utc_time_tuple = time.strptime(time_string, "%Y-%m-%dT%H:%M:%S")
dt = datetime(1970, 1, 1) + timedelta(seconds=timegm(utc_time_tuple))
if dot:
    dt = dt.replace(microsecond=datetime.strptime(us, '%f').microsecond)
print(dt)
# -> 2012-07-01 00:00:00.209215
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21027639

复制
相关文章

相似问题

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