Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查它是否';有时间戳的xx:00:00?_Python_Datetime_Time_Utc_Leap Second - Fatal编程技术网

Python 如何检查它是否';有时间戳的xx:00:00?

Python 如何检查它是否';有时间戳的xx:00:00?,python,datetime,time,utc,leap-second,Python,Datetime,Time,Utc,Leap Second,检查是否为xx:00:00 UTC/GMT似乎与检查时间戳%3600==0一样简单,时间戳=自1970-01-01 00:00以来经过的秒数。我们可以在这里看到: import datetime print datetime.datetime.fromtimestamp(3600*24*17000) # 2016-07-18 02:00:00 但这不是与我们的观点相矛盾吗?事实上,从1970-01-01 00:00:00到2016-07-18 02:00:00之间经过的秒数不是3600的倍数

检查是否为xx:00:00 UTC/GMT似乎与检查时间戳%3600==0一样简单,时间戳=自1970-01-01 00:00以来经过的秒数。我们可以在这里看到:

import datetime 
print datetime.datetime.fromtimestamp(3600*24*17000)
# 2016-07-18 02:00:00
但这不是与我们的观点相矛盾吗?事实上,从1970-01-01 00:00:00到2016-07-18 02:00:00之间经过的秒数不是3600的倍数,而是3600+26闰秒的倍数(从1972年到现在已经有26闰秒)



更准确地说:1970-01-01 00:00:00到2016-07-18 02:00:00之间经过的秒数是
3600*24*17000+26
而不是
3600*24*17000
Python的
datetime。datetime
对象无法处理闰秒,因为
seconds
属性被限制在这个范围内0..59:

In [19]: DT.datetime(2012, 6, 30, 23, 59, 60)
ValueError: second must be in 0..59
(2012年6月30日午夜前有一个闰秒)

因此,Python的datetime系统并不完全代表现实世界中存在的所有时间。它模拟了一个不存在闰秒的简化世界

另请参见:此已关闭,状态为“不会修复”

链接页面显示为可()处理闰秒的
datetime.datetime
的替代品。

我终于找到了它:

插入闰秒(平均每年半一次)时,Unix时间数在闰秒期间持续增加,在这段时间内,从当前一天开始算起的时间超过86400秒,,然后在闰秒结束时向后跳1,哪一天是第二天的开始

因此,可能有一些代码在某个地方进行这种闰秒检测+跳回。这里提到了“闰秒”,但我看不出它怎么能检测出它是不是一秒

import datetime 
print datetime.datetime.fromtimestamp(915148799) #1999-01-01 00:59:59
print datetime.datetime.fromtimestamp(915148800) #1999-01-01 01:00:00

许多(大多数?)计算机系统都会跟踪。你为什么需要这个?如果要在午夜(或一天中的其他时间)运行一些代码,有更好的方法。@Thomas我知道
cron
和类似的Python调度工具,但我不需要它,我只是想知道UNIX时间戳是如何工作的。是的,但这意味着1)Python的datetime/timestamp与其他语言中的其他UNIX时间戳实现不同(这很糟糕,我认为不是这样),或者2)所有UNIX时间戳实现一般不关心闰秒。那么,在实时和从UNIX时间戳提取的时间之间是否存在缓慢的“漂移”?每个UNIX时间戳都忽略闰秒。它不会忽略它们@unutbu,当它出现时,它会跳回1秒的时间戳来处理它们。@Basj:也许我说UNIX时间戳忽略闰秒是错的。UNIX时间戳回滚到闰秒。现在的问题是,您有两个真实的时刻,由相同的UNIX时间戳表示。Python使用系统的
localtime
将时间戳转换为可能识别或可能不识别闰秒的日期。显示Python压缩秒数>=60到59秒,因此忽略闰秒。向后跳是一种方法,但也可以查看许多实现“闰秒涂抹”而不是闰秒的实现。谷歌只是如何进行涂片的一个例子。围棋语言选择了不同的策略潜在的问题是不同的机构选择了不同的目标来决定时间应该如何工作
import datetime 
print datetime.datetime.fromtimestamp(915148799) #1999-01-01 00:59:59
print datetime.datetime.fromtimestamp(915148800) #1999-01-01 01:00:00