【问题标题】:Timestamp to long datetime长日期时间的时间戳
【发布时间】:2017-09-13 18:13:27
【问题描述】:

我有这个函数可以将时间戳转换为日期时间对象,该对象表示: “今天晚上 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(天偏移量)它是一个负数...有人可以帮我完成我的功能吗?

谢谢,

丹尼斯·安吉尔

【问题讨论】:

  • 您真的需要自己实现解析日期时间的功能还是可以使用其他库?我建议您不要实施自己,因为如果您想以正确的方式进行操作,那并不是那么微不足道。
  • 可能不是,您有推荐的库吗?一个会根据偏移时间给我一个输出?
  • otherdate = 1504246379 是什么单位,以秒为单位?
  • @Anil_M 是的,以秒为单位

标签: python datetime time timedelta


【解决方案1】:

您的代码中的dtfloat 类型,因为您要减去两个浮点类型。

>>> 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'
>>> 

希望对你有帮助。

【讨论】:

    【解决方案2】:

    dt = now - otherdate 将返回 float,而不是 datetimetimedelta 对象,dt.day 等将因此失败。

    模块datetime 包含类方法datetime.utcfromtimestamp(timestamp),它可以很好地完成您打算实现的转换。查看 Python 文档中的类库...

    【讨论】:

      猜你喜欢
      • 2013-06-16
      • 1970-01-01
      • 2014-05-22
      • 2011-10-01
      • 1970-01-01
      • 2021-01-28
      • 2018-05-22
      • 2010-10-02
      • 1970-01-01
      相关资源
      最近更新 更多