时间戳到长日期时间
问题描述:
我有这个功能,将时间戳转换为一个日期时间对象,说什么; “今天下午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(天偏移)它的负数......有人能帮我完成我的功能吗?
谢谢
丹尼斯·安格尔
答
dt = now - otherdate
将返回float
,而不是一个datetime
或timedelta
对象,dt.day
等会因为这个原因失败。
模块datetime
包含类方法datetime.utcfromtimestamp(timestamp)
,它可能很好地执行您打算实施的转换。看看Python文档中的类库...
答
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'
>>>
希望它有帮助。
你真的需要自己实现解析日期时间功能还是可以使用其他库?我建议你尽可能地实施自己,因为如果你想以正确的方式做到这一点,那并不是那么简单。 – alphiii
问题不大,你有推荐的图书馆吗?一个会给我一个基于偏移时间的输出? –
什么单位是'otherdate = 1504246379',几秒钟? –