2012-08-28 219 views
1

我有一个谷歌应用程序引擎日期时间属性,我用x.date = datetime.datetime.now()填充。我在日期之间做了很多比较,经过很多调试后,事实证明,我的客户端设备发送日期的精度比Python日期的精度要低,这导致了可怕的混乱。Python日期时间精度

这里是Python的产生: 2012-08-28 21:36:13.158497datetime.datetime.now(),但我要的是2012-08-28 21:36:13.158000(注意末尾的三个零。)

我怎样才能做到这一点? (记住,我不试图格式字符串或者任何我想格式化日期对象。)

我想一个办法是把它格式化成与所需的精确度,像这样的字符串:

dateString = date.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] 

然后回到日期对象。但是有一个更好的方法。

+0

即使客户端具有更好的精度,您是否会遇到客户端和服务器以及不同服务器实例之间的时钟偏差问题。 –

+0

如果您的客户端和服务器导致的错误不是以纳秒级精度进行同步,则根本不会在网络系统上修复它。网络延迟将比舍入误差大几个数量级。 – geoffspear

+0

为什么你首先在日期时间进行平等比较?这与在浮动上进行等式比较一样糟糕。 –

回答

4
dt = dt.replace(microsecond = (dt.microsecond/1000) * 1000) 

这会截断最后3位数字。正确的四舍五入有点复杂,因为它可能会达到1000000微秒。

+0

int(round(dt.microsecond,-3))对我来说看起来更加清晰,但并没有真正产生影响 – Marat

+0

@Marat,正如我所解释的,在不使复杂解决方案复杂化的情况下,不能使用round。 –

+0

对不起,在完全阅读之前发表评论。我的失败 – Marat