几分之一秒和 pytz:你有更清洁的解决方案吗?

Posted

技术标签:

【中文标题】几分之一秒和 pytz:你有更清洁的解决方案吗?【英文标题】:fractions of seconds and pytz: do you have a cleaner solution? 【发布时间】:2015-12-11 02:00:08 【问题描述】:

我在日志中的一些时间看起来像这样:

1440498131.372625

我使用 pytz 所做的是

utc = pytz.utc
for anra in raFromMCCS:
    fsecs = float(anra.time)
    isecs = int(fsecs)
    isec2 = int(fsecs * 1000)
    dt = datetime.utcfromtimestamp(isecs).replace(tzinfo=utc)
    #print (dt.year)
    dt2 = utc.localize(datetime(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, int((fsecs - isecs) * 1000000)))
    #      dt3 = datetime.utcfromtimestamp(isec2)
    print(dt, dt2)#, dt3)  

我在愚蠢的 dt3 尝试中离开,以表明我对这里的各种事物都很陌生。

我知道 dt2 给了我我想要的东西,但它似乎是一种迂回的方式到达那里。如果您有更好的解决方案,请告诉我。

谢谢!

【问题讨论】:

您要解决的问题是什么? 【参考方案1】:

您可以将浮点数直接传递给fromtimestamp()

d = datetime.fromtimestamp(1440498131.372625, utc)

如果您知道输入是 POSIX 时间(非“正确”时区),那么您可以使用直接公式:

d = datetime(1970, 1, 1, tzinfo=utc) + timedelta(seconds=1440498131.372625)

它应该为输入时间戳提供一个可移植的(更宽的)范围。 Python 版本之间的舍入行为应该更加一致,请参阅datetime.utcfromtimestamp rounds results incorrectly。

如果输入是字符串;你可以使用strptime('%f')解析微秒:

from datetime import datetime, timedelta

seconds, dot, us = "1440498131.372625".partition('.')
d = datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=int(seconds))
if dot:
    d = d.replace(microsecond=datetime.strptime(us, '%f').microsecond)

在哪里timezone.utc is defined here。如果使用少于 6 位数字表示微秒,例如 ".372",它也可以工作。

只有最后一个代码示例保证为任何输入时间戳保留微秒。

【讨论】:

谢谢。第一个有效,或者至少它给了我与我第一种方式相同的结果(输出差异)。非常感谢。 对不起,对未来参考的另一条评论:python3.4 而且,我最终使用 return datetime(1970, 1, 1, tzinfo=utc) + timedelta(seconds=float(timeInSecs)) 因为您提供的参考说明这是另一种方式的期望行为......再次,差异显示与我原来的方式相同的结果,所以我坚持这个。 @evernoob:要了解为什么在一般情况下应该使用整数而不是浮点数,请考虑 int((datetime.max - datetime.min) / timedelta(microseconds=1))(datetime.max - datetime.min) // timedelta(microseconds=1)(前者不精确)。虽然对于日常时间戳的范围,浮点数应该有足够的精度。

以上是关于几分之一秒和 pytz:你有更清洁的解决方案吗?的主要内容,如果未能解决你的问题,请参考以下文章

ODBC 链接表未显示几分之一秒

分钟和秒可以一起计算吗

iPhone:MPMoviePlayer 最初在几分之一秒内显示黑色背景

我和我的表姐妹有几分之几血缘关系?

nmap 在 localhost 上显示随机打开的端口几分之一秒

是否有 pytz zoneinfo 的 URL 用于 gae?