2017-01-09 70 views
1

是否有一种简单的方法将显示日期/时间数据的字符串转换为Unix刻度值?Python将时间字符串转换为刻度吗?

我有日期/数据的一些文件,我使用python脚本从国家气象中心直接下载timestrings。

该字符串是在格式yearmonthdayhourminutesseconds例如20170108233000.

我可以很容易地打破成很好地格式化字符串,但是有什么办法把它转换成蜱因为这将是对分类有用,消除重复数据等?

我在想一个简单的yearticks =(年 - 1970年)*(365 * 24 * 60 * 60),但不考虑闰年和闰秒。

有没有简单的方法来做到这一点?

+0

那么你卡在哪个部分?将该字符串转换为Python'datetime'对象('.strptime(...)')或从该对象获取Unix时间戳('.timestamp()')? – jonrsharpe

+0

我不认为Python中有任何跟踪闰秒的东西。如果这是一个真正的要求,你会遇到一些麻烦。 –

+0

根据[Wikipedia](https://en.wikipedia.org/wiki/Unix_time)Unix时间会忽略闰秒,所以在这方面它与Python相同。好东西,因为一个跟踪闰秒的图书馆会非常困难。 –

回答

1

我建议你分析它变成一个datetime对象,然后计算Januari 1,1970年和那一刻之间的秒数:

import datetime 

d = datetime.datetime.strptime("20170108233000", "%Y%m%d%H%M%S") 
t0 = datetime.datetime(1970, 1, 1, tzinfo=timezone.utc) 
ticks = (d - t0).total_seconds() 

编辑

,或者你可以像@在

d.timestamp() 

运行此:jonrsharpe建议,立即使用的timestamp方法我的机器生产:

$ python 
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import datetime 
>>> 
>>> d = datetime.datetime.strptime("20170108233000", "%Y%m%d%H%M%S") 
>>> t0 = datetime.datetime(1970, 1, 1) 
>>> ticks = (d - t0).total_seconds() 
>>> ticks 
1483918200.0 
>>> 
$ date -d @1483918200 
Mon Jan 9 00:30:00 CET 2017 

请注意,这产生2017年1月9日。但这是比利时时间。

+0

有一个'timestamp'方法,你不需要自己计算开始点! – jonrsharpe

+0

@jonrsharpe:谢谢你的建议。然而,由于某种原因,如果我在解释器中这样做,它会给出错误? –

+0

唉......什么错误? – jonrsharpe