2017-10-19 38 views
1

我試圖將時間戳轉換爲人類日期。我這樣做是爲了獲得消息的本地時間並將其作爲人類日期插入到我們的數據庫中。Datetime fromtimestamp返回錯誤的年份

目前,如果我使用下面的代碼:

from datetime import datetime, timedelta 
    reference_date1 = datetime(2001, 1, 1, 0, 0, 0) 
    delta_since_reference = timedelta(seconds=530023775) 
    print str(reference_date1 + delta_since_reference) 

我得到:

2017-10-18 12:49:35 

其中有日期是正確的,但時間是錯誤的。 如果我使用:

print datetime.fromtimestamp(530023775) 

我得到:

1986-10-18 14:49:35 

其中這裏的時間不正確的,但今年是錯誤的。 有2種方法可以合併2個結果嗎? 還是有更好的方法來轉換時間戳?

回答

1

至於你要轉換的時間戳記,以「人」的日期,嘗試這樣做:

from datetime import datetime 

your_time_stamp = int("1284101485") 
human_date = datetime.fromtimestamp(your_time_stamp).strftime('%Y-%m-%d %H:%M:%S') 

此解決方案已採取here(另一個stackoverflow帖子)。

+0

印刷1986年10月18日14時49分35秒,而不是2017年10月18日14時49分35秒 –

+0

您的腳本打印'1986-10-18 14:49:35'因爲你的時間戳530023775表示這個日期。我想你想得到當前日期,所以試着這樣做:'datetime.now()。strftime('%Y-%m-%d%H:%M:%S')' –

+0

謝謝我使用它。 –

1

在你第一次嘗試使用2001年1月1日作爲基準日:

reference_date1 = datetime(2001, 1, 1, 0, 0, 0) 

凡爲根據Python docsdatetime.fromtimestamp

返回對應的POSIX時間戳本地日期,例如由time.time()返回。 [..]請注意,非POSIX系統,包括閏秒在他們的時間戳的概念,閏秒被忽略fromtimestamp()

重點煤礦

而一個POSIX時間戳是:

Unix時間(也稱爲POSIX時間或epoch時間)[引文需要]是一個描述時間點的系統,定義爲從00:00:00開始經過的秒數。Coordinated世界時間(UTC),星期四,1970年1月1日

所以:

  • 的日期,因爲不同的參考日期是不同的。簡單地決定要堅持
  • 我的電腦上的時間是相同的(我用的是POSIX兼容的Mac系統)是什麼標準,但如果你使用非POSIX系統
他們可能會在PC上有所不同

解決方案:

  • 如果您只需要打印日期

    datetime.now()

  • 如果您需要的日期都爲時間戳和打印

    datetime.fromtimestamp(time.time())

2

在使用fromtimestamp()計算日期時間時,您忘記添加reference_date1

這裏是更新的代碼

from datetime import datetime, timedelta 
reference_date1 = datetime(2001, 1, 1, 0, 0, 0) 
delta_since_reference = timedelta(seconds=530023775) 
print(str(reference_date1 + delta_since_reference)) 
print(datetime.fromtimestamp(530023775 + float(datetime.strptime(str(reference_date1), "%Y-%m-%d %H:%M:%S").strftime('%s')))) 

它打印

2017-10-18 12:49:35 
2017-10-18 12:49:35  
+0

第二次打印是打印錯誤的時間,正確的時間應該是14:49:35 –

+0

我得到Traceback「'datetime.datetime'對象沒有屬性'timestamp'」for print(datetime.fromtimestamp(530023775 + reference_date1.timestamp ())) –

+0

你確定你應該得到14小時嗎? '(530023775 /(60 * 60))%24 = 12.83'這表示起飛後的剩餘小時數爲12.83。因此,從您參考日期的時間是00:00開始,小時數爲12是有意義的。至於Traceback錯誤,事實證明datetime.datetime.timestamp僅在Python 3中可用。我將更新我的答案以與Python 2兼容。 – user2471379