2017-01-09 77 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