Python 秒的分数和pytz:你有更干净的溶液吗?

Python 秒的分数和pytz:你有更干净的溶液吗?,python,python-3.x,pytz,Python,Python 3.x,Pytz,我在日志中有这样的时间: 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) d

我在日志中有这样的时间:

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给了我想要的,但它似乎是一种迂回的方式。如果你有更好的解决办法,请告诉我


谢谢

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

d = datetime.fromtimestamp(1440498131.372625, utc)
如果您知道输入是POSIX时间(非“正确”时区),则可以使用直接公式:

d = datetime(1970, 1, 1, tzinfo=utc) + timedelta(seconds=1440498131.372625)
它应该为输入时间戳提供一个可移植的(更宽的)范围。Python版本之间的舍入行为应该更加一致,请参阅

如果输入是字符串;您可以使用strtime(“%f”)解析微秒数。:

在哪里。如果微秒用少于6位数字表示,例如,
“.372”
,它也可以工作


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

您试图解决的问题是什么?谢谢。第一种方法奏效了,或者至少它给了我和第一种方法相同的结果(不同的输出)。非常感谢。很抱歉,未来参考的另一个注释是:python3.4,而且,我最终使用了return-datetime(1970,1,1,tzinfo=utc)+timedelta(seconds=float(timeinses)),因为您提供的参考说明这是另一种方式的期望行为。。。再一次,DIFF显示了与原来的方法相同的结果,所以我坚持这个。“EnNOOB:为了理解为什么在一般情况下应该使用整数代替浮点,考虑<代码> int((DATEMEM.MAD- DATETIM.MIN)/时间增量(微秒=1))< /代码> VS <代码>(DATEMEM.MAX-DATETIM.MIN)//时间增量(微秒=1)(前者不精确)。虽然对于每天的时间戳范围,浮动应该有足够的精度。
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)