2017-09-13 276 views
-1

我有這個功能,將時間戳轉換爲一個日期時間對象,說什麼; 「今天下午10:56」或「昨天上午1:06」或其他人...時間戳到長日期時間

我目前遇到了一些問題。

otherdate = 1504246379 
now = time.time() 
if otherdate: 
    dt = now - otherdate 
    offset = dt.seconds + (dt.days * 60 * 60 * 24) 
if offset: 
    delta_s = offset % 60 
    offset /= 60 
    delta_m = offset % 60 
    offset /= 60 
    delta_h = offset % 24 
    offset /= 24 
    delta_d = offset 
else: 
    raise ValueError("Must supply otherdate or offset (from now)") 
if delta_d > 1: 
    if delta_d > 6: 
     date = now + timedelta(days=-delta_d, hours=-delta_h, minutes=-delta_m) 
     return date.strftime('%A, %Y %B %m, %H:%I') 
    else: 
     wday = now + timedelta(days=-delta_d) 
     return wday.strftime('%A') 
if delta_d == 1: 
    return "Yesterday" 
if delta_h > 0: 
    return "%dh%dm ago" % (delta_h, delta_m) 
if delta_m > 0: 
    return "%dm%ds ago" % (delta_m, delta_s) 
else: 
    return "%ds ago" % delta_s 

我收到的當前錯誤是:

Traceback (most recent call last): 
File "test.py", line 69, in <module> 
date = get_long_date(timestamp) 
File "test.py", line 40, in get_long_date 
offset = dt.seconds + (dt.days * 60 * 60 * 24) 
AttributeError: 'float' object has no attribute 'seconds' 

所以我去了補充:

dt = timedelta(dt) 

和清除錯誤,但是如果我打印delta_d(天偏移)它的負數......有人能幫我完成我的功能嗎?

謝謝

丹尼斯·安格爾

+1

你真的需要自己實現解析日期時間功能還是可以使用其他庫?我建議你儘可能地實施自己,因爲如果你想以正確的方式做到這一點,那並不是那麼簡單。 – alphiii

+0

問題不大,你有推薦的圖書館嗎?一個會給我一個基於偏移時間的輸出? –

+0

什麼單位是'otherdate = 1504246379',幾秒鐘? –

回答

0

dt = now - otherdate將返回float,而不是一個datetimetimedelta對象,dt.day等會因爲這個原因失敗。

模塊datetime包含類方法datetime.utcfromtimestamp(timestamp),它可能很好地執行您打算實施的轉換。看看Python文檔中的類庫...

0

dt因爲您正在減去兩種浮點類型,所以您的代碼中的類型爲float

>>> type(dt) 
<type 'float'> 

您可能需要轉換dt維持

dt = timedelta(seconds=dt) 

而且,你可能想嘗試natural庫來削減你的代碼。

pip install natural

檢查文檔here

你可以用一個襯墊找到向前或向後增量直接。

from natural import date 
import time 
>>> otherdate = 1504246379 
>>> date.day(time.time() - otherdate) 
'January 13' 
>>> date.day(time.time() + otherdate) 
'May 14' 
>>> 

希望它有幫助。