2017-09-13 100 views
2

我想將時間(字符串)轉換爲unix時間戳,然後將其轉換回可讀的日期時間,但是,有7個小時不同。我的python代碼有什麼問題?通過python pandas轉換Unix時間戳

import datetime 

#Convert a Datetime String to unix timestamp 
def get_Timestamp_from_String(datetimeStr):  

    timestamp = int(datetime.datetime.strptime(datetimeStr, '%Y-%m-%d %H:%M:%S').timestamp())*1000 

    return timestamp 


# Convert unix timestamp to DateTime  
def get_Datetime_from_Timestamp(timestamp): 

    dt = pd.to_datetime(timestamp, unit='ms') 

    return dt 

測試日期時間:「2016年4月1日1時10分04秒」,但是,如果我把它轉換回來,然後我得到的結果是:「2016年4月1日8點10分04秒」 ,有7個小時不同

timestamp = get_Timestamp_from_String("2016-04-01 01:10:04") 
res = get_Datetime_from_Timestamp(timestamp) 
print(res) 

>>>Timestamp('2016-04-01 08:10:04') 

我的代碼中有什麼問題?

+0

T imezone問題? – IanS

+0

@Ians我覺得很奇怪,我沒有在兩個函數中給出任何時區,所以默認的時區應該被應用。 – xirururu

回答

2

我想你需要to_datetime兩次,MS除以10**6

datetimeStr = '2016-04-01 01:10:04' 
timestamp = pd.to_datetime(datetimeStr).value //10**6 
print (timestamp) 
1459473004000 

dt = pd.to_datetime(timestamp, unit='ms') 
print (dt) 
2016-04-01 01:10:04 

對於ns,在numpy分時間戳的本機格式是沒有必要的:

datetimeStr = '2016-04-01 01:10:04' 
timestamp = pd.to_datetime(datetimeStr).value 
print (timestamp) 
1459473004000000000 

dt = pd.to_datetime(timestamp, unit='ns') 
print (dt) 
2016-04-01 01:10:04 

但是,如果存在時區信息:

datetimeStr = '2016-04-01 01:10:04-07:00' 
timestamp = pd.to_datetime(datetimeStr).value //10**6 
print (timestamp) 
1459498204000 

dt = pd.to_datetime(timestamp, unit='ms') 
print (dt) 
2016-04-01 08:10:04 
+0

'dt' * ......不是df –

+0

@jezrael,非常感謝您的回答。但是,我認爲,這很奇怪,來自'pd.to_datetime(...)'的結果與'datetime.datetime.strptime(...)'不同,我無法理解它...... – xirururu

+0

硬問題 - 但我認爲熊貓'to_datetime'更普遍。 – jezrael