2015-02-11 38 views
-4

我有這樣一個值:我將如何轉換日期字符串劃時代的時間在Python

var="11-feb-15:04:02:21" 

我需要轉換爲劃時代的時間:

我嘗試這樣做:

var.strftime('%s') 

我得到這個錯誤:

AttributeError: 'str' object has no attribute 'strftime' 

有任何想法嗎? 我

+1

在這一行中有太多錯誤:'strftime'不是'str'的​​方法(這是'datetime.datetime'的一種方法);它不是用於將* from *'str' *轉換爲*'datetime'(它用於將* from datetime *轉換爲* str)。和'%s'遠遠沒有足夠的信息來解釋你如何認爲字符串應該被解釋。也許[RTFM](https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior)? – jonrsharpe 2015-02-11 21:37:31

+0

相關:[在Python中將datetime.date轉換爲UTC時間戳](http://stackoverflow.com/q/8777753/4279) – jfs 2015-02-11 21:38:42

+0

@jonrsharpe:無關:'time.strftime('%s')'是'str( int(time.time()))'在某些系統上。 – jfs 2015-02-11 22:28:01

回答

3

我希望你會通過這個例子,並查找相應的文件。

>>> s = "11-feb-15:04:02:21" 
>>> timestruct = time.strptime(s, "%d-%b-%y:%H:%M:%S") 
>>> time.mktime(timestruct) 
1423623741.0 

的格式說明在這裏被定義:https://docs.python.org/2/library/time.html#time.strftime

該文檔也都對事實清楚的,當你想從struct_time在當地時間從紀元轉換爲你需要使用mktime()

+0

爲什麼OP會查找任何文檔?他們擁有他們需要的一切。 – njzk2 2015-02-11 21:44:41

+0

@ njzk2:我有點同意你的看法。但是,我自己發現時間/日期時間文檔有時會有點混淆,特別是作爲初學者。查看工作解決方案總是非常有幫助,然後*然後*試圖理解*爲什麼*它的工作原理。如果他/她不使用該優惠,那是他/她的問題。儘管如此,我絕對不希望上升,但是;-)。 – 2015-02-11 21:46:28

+0

注意:本地時間可能不明確(例如,在DST過渡結束(「回退」)期間),並且本地時區在過去可能具有不同的utc偏移:time.mktime()可能返回錯誤的結果。 – jfs 2015-02-11 22:31:30

1

要轉換代表本地時間爲「自紀元秒」時間字符串:

#!/usr/bin/env python 
import time 
from datetime import datetime 
import pytz # $ pip install pytz 
from tzlocal import get_localzone # $ pip install tzlocal 

tt = time.strptime("11-feb-15:04:02:21", "%d-%b-%y:%H:%M:%S") 
naive_dt = datetime(*tt[:5]+(min(tt[5], 59),)) 
dt = get_localzone().localize(naive_dt, is_dst=None) 
timestamp = (dt - datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds() 
print(timestamp) # -> 1423623741.0 

該解決方案將引發異常,如果輸入的時間不明確或不存在例如,DST過渡時期 - - 將is_dst參數設置爲True/False以消除時間歧義和/或調用tz.normalize()方法來調整不存在的本地時間。

爲了獲得正確的utc偏移量,使用了tz數據庫(get_localzone()返回當地時區作爲pytz時區對象)。

time.strptime()用於支持閏秒,例如,"1-jul-15:1:59:60"轉換爲datetime(2015, 7, 1, 1, 59, 59) - 注意:秒被截斷爲59

相關問題