2012-08-28 220 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