2017-06-14 377 views
2

因此我使用Instagram API,我需要花時間上傳圖片。通常一切都好和時間戳看起來是這樣的:Python時間戳(13位數字)返回2074年,以及如何將15位數時間戳轉換爲字符串

>>> import time 
>>> timestamp = 1497423819748 
>>> time.strftime("%d %b %Y %H:%M:%S GMT", time.gmtime(timestamp/1000.0)).split(' ') 
['14', 'Jun', '2017', '07:03:39', 'GMT'] 

或本:

>>> timestamp = 1497425126 
>>> time.strftime('%d %b %Y %H:%M:%S GMT', time.gmtime(timestamp)).split(' ') 
['14', 'Jun', '2017', '07:25:26', 'GMT'] 

但一些媒體有時間戳,看起來像這樣:

>>> timestamp = 3302720163189 
>>> time.strftime("%d %b %Y %H:%M:%S GMT", time.gmtime(timestamp/1000.0)).split(' ') 
['28', 'Aug', '2074', '22:16:03', 'GMT'] 

,甚至這15個數字時間戳:

>>> timestamp = 186693871989665 
>>> time.strftime("%d %b %Y %H:%M:%S GMT", time.gmtime(timestamp/100000.0)).split(' ') 
['28', 'Feb', '2029', '02:05:19', 'GMT'] 

請你能幫我正確地將這些類型的時間戳轉換爲字符串,或者這些時間戳有錯誤嗎?

更新:

>>> InstagramAPI.searchLocation('High Castle') 
>>> location_id = InstagramAPI.LastJson['items'][0]['location']['pk'] 
>>> InstagramAPI.getLocationFeed(location_id) 
>>> print(InstagramAPI.LastJson['items'][9]['device_timestamp'], InstagramAPI.LastJson['items'][9]['taken_at']) 
77276011342 1497443715 

情況下或者在與15位打印此:

因此它似乎有時只是一些錯誤 'device_timestamp'該InstagramAPI給我,我不知道,但看起來像它返回時間與用戶的設備拍攝的照片和他們的手機上的時間是不正確的)但'taken_at'似乎返回正確的時間戳,所以我現在將使用它,但thx尋求幫助。如果你有不同的答案,我希望看到它。

+0

這兩個時間戳後者看上去有點像錯誤對我來說,他們應該被忽略。 –

+0

您確定這些是您從API獲得的確切值嗎?看起來好像你可能會讓你的一端發生整數溢出...... – CBroe

+0

我看到15位數的時間戳也會從api中回來,而且頻繁出現。我認爲這可能是一個SMS/GMS編碼的時間戳,但我還不確定 – Felipe

回答

1

在與API工作,我已經看到了一些不同的格式

  • Unix時間戳,10個數字,例如1200499926
  • Unix時間戳,微秒,15位數字, 143062470196222
  • Unix時間戳,微秒,16位數字, 1278276905502403
  • Javascript格式(不知道名字),13位數字,例如1508609431327

由於我正在瀏覽器中查看這些內容,因此我需要將它們解析爲Date(),因此您的情況可能會有所不同。

無論哪種方式,唯一需要的轉換就是把每一種爲13位字符串和我有正確的輸出:

// Multiply by 1000 to include milliseconds 
// > "Wed Jan 16 2008 08:12:06 GMT-0800 (Pacific Standard Time)" 
new Date(1200499926 * 1000).toString(); 

// Divide by 100 to scrap the extraneous microseconds 
// > "Sat May 02 2015 20:45:01 GMT-0700 (Pacific Daylight Time)" 
new Date(143062470196222/100).toString(); 

// Divide by 1000 to scrap microseconds + region 
// > "Sun Jul 04 2010 13:55:05 GMT-0700 (Pacific Daylight Time)" 
new Date(1278276905502403/1000).toString() 

注意

我不是100%確定爲什麼15位數時間戳的最後一位數字丟失了,但重要的是,如果您可以丟棄微秒以及其他任何數據,則前13位數字會給您一個正確的時間戳

處理這種通用的辦法是經常乘毫秒,並且丟棄其餘的(JavaScript的):

let time = Number((1278276905502403 * 1000).toString().substring(0, 13)) 
let Date = new Date(time).toString() 
// > "Sun Jul 04 2010 13:55:05 GMT-0700 (Pacific Daylight Time)" 
相關問題