我在日志中的时间看起来像这样:
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给了我想要的东西,但它似乎是一种迂回的方式来到达那里。如果您有更好的解决方案,请告诉我。
谢谢!
答案 0 :(得分:0)
您可以将浮动直接传递给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"
。
只有最后一个代码示例才能保证为任何输入时间戳保留微秒。