2014-02-14 63 views
48

我已經使用Ruby腳本到ISO時間戳轉換爲時代,那我解析文件有以下時間戳結構:轉換信號出現時間與毫秒爲datetime

2009-03-08T00:27:31.807 

因爲我想保留毫秒我使用下面的Ruby代碼將其轉換爲劃時代的時間:

irb(main):010:0> DateTime.parse('2009-03-08T00:27:31.807').strftime("%Q") 
=> "1236472051807" 

但是在Python我嘗試以下操作:

import time 
time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1236472051807)) 

但我沒有得到原來的時間日期時間回,

>>> time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1236472051807)) 
'41152-03-29 02:50:07' 
>>> 

我奇怪的是它關係到我是如何格式化?

回答

83

使用datetime.datetime.fromtimestamp

>>> import datetime 
>>> s = 1236472051807/1000.0 
>>> datetime.datetime.fromtimestamp(s).strftime('%Y-%m-%d %H:%M:%S.%f') 
'2009-03-08 09:27:31.807000' 

%f命令只datetime.datetime.strftime支持,而不是time.strftime

UPDATE使用%替代,str.format

>>> import time 
>>> s, ms = divmod(1236472051807, 1000) # (1236472051, 807) 
>>> '%s.%03d' % (time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(s)), ms) 
'2009-03-08 00:27:31.807' 
>>> '{}.{:03d}'.format(time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(s)), ms) 
'2009-03-08 00:27:31.807' 
+2

是的,我會建議這個...但meh很好的答案(保留顯示毫秒+1)) –

+0

很好的答案@JoranBeasley你的也很棒:)謝謝你們。 –

+0

請注意@falsetru首先回答除以浮點數'1000.0',從而保持日期時間毫秒。 –

13

那些毫秒,只要除以1000他們,因爲gmtime的預計秒......

time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1236472051807/1000.0)) 
+3

我看,但我會被失去毫秒正確的..? –

+1

是的...我認爲你可以通過做'timestamp/1000.0'來保留它們,它會以小數形式傳遞它們(雖然我不確定你是否可以檢索它們) –

+0

是否有一個等同於gmtime或毫秒作爲輸入? –