我发现日期时间.时间戳()函数在Linux和Windows上返回不同的值。下面是一个简单的复制方法:
from datetime import date, time, datetime, timedelta
def main():
dt = datetime(2000, 1, 1)
edt = datetime(2006, 12, 31)
fname = 't1.csv'
f = open(fname, 'w')
f.write('date,timestamp\n')
while dt <= edt:
f.write('{0:%Y-%m-%d},{1:.0f}\n'.format(dt, dt.timestamp()))
dt += timedelta(days=1)
f.close()
return 0
这是最后一个与Windows不同的部分:(Windows7 64+Python3.4.3 64)
^{pr2}$下面是相应的Linux输出:(RedHat6 64+Python 3.4.3 64)
...
2006-10-30,1162184400
2006-10-31,1162270800
2006-11-01,1162357200
2006-11-02,1162443600
2006-11-03,1162530000
2006-11-04,1162616400
2006-11-05,1162702800
...
所有系统都使用EST和自动DST调整。一些观察结果:
只是想知道为什么timestamp()函数在windows和linux上的行为不同。在
在对您的问题做了一些研究之后,我发现了这个link它讨论了系统的开始日期是如何不同的,我认为linux就像unix,使用
01/01/1970
作为它的开始时间,而windows使用的时间要早得多,这取决于您正在做什么,从我收集的信息来看,如果您将文件保存到但是用于计算时间戳的时间是31/12/1601
。所以看起来他们所看到的开始时间是不同的,如果你再看一看,你会发现实际的开始时间是不同的,比如12:00:00。在原始日期时间对象上的
datetime.timestamp()
在内部调用mktime()
,即输入被解释为本地时间。本地时间定义可能因系统而异。在如果本地时区过去有不同的utc偏移量,并且没有使用历史时区数据库,则C
mktime()
可能返回错误的结果。python
无法在Windows上访问{a1}。在如果应用程序使用不同的tzdata版本,可能会得到不同的结果。如果使用不同的
mktime()
实现(其他都相同),那么对于不明确的时间(例如,在DST转换期间),也可能得到不同的结果。在要在不同的系统上获得相同的结果,use ^{} module (不同系统上的同一版本使用与Python包zoneinfo捆绑在一起):
输出(
^{pr2}$pytz.__version__ == 2014.10
)相关问题 更多 >
编程相关推荐