2012-07-14 49 views
5

我的時區是UTC + 5。datetime and timedelta

所以當我做datetime.datetime.now()它提供了:

2012-07-14 06:11:47.318000 
#note its 6AM 

我想減去它5小時,使之成爲等於datetime.datetime.utcnow(),所以我所做的:

import time 
from datetime import datetime, timedelta 
dt = datetime.now() - timedelta(hours=time.timezone/60/60) 
print dt 
#gives 2012-07-14 11:11:47.319000 

""" 
Here 11 is not the PM its AM i double check it by doing 
print dt.strftime('%H:%M:%S %p') 
#gives 11:11:47 AM 
""" 

你看到的不是減去5小時而是在日期時間裏增加了5個小時? 我在這裏做錯了什麼?

+0

嘗試將'-'改爲'+' – inspectorG4dget 2012-07-14 01:22:22

+0

是的,當我使用+它的問題實際上減去了,這就是爲什麼我感到困惑? – 2012-07-14 01:22:59

回答

5

您正在創建一個負面timedelta。的time.timezone值爲負:

>>> import time 
>>> time.timezone 
-36000 

在這裏,我在UTC + 10,那麼你的代碼變成:

>>> from datetime import timedelta 
>>> print timedelta(hours=time.timezone/60/60) 
-1 day, 14:00:00 
+0

謝謝,我沒有注意到time.timezone正在給我返回負值。 – 2012-07-14 01:37:32

5

The documentation是明確的:

time.timezone本地(非DST)時區的偏移量,以UTC爲單位的秒數(西歐大部分地區爲負值,美國爲正值,英國爲零)。

如此積極的UTC值具有負時區。