2012-07-14 32 views
5

Múi giờ của tôi là UTC + 5.datetime và timedelta

Vì vậy, khi tôi làm datetime.datetime.now() nó mang lại:

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

tôi muốn trừ 5 giờ từ nó để nó trở nên bằng datetime.datetime.utcnow() vì vậy tôi đã làm:

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 
""" 

Bạn thấy thay vì trừ đi 5 giờ, nó thêm 5 giờ vào datetime ?? Tôi có làm gì sai ở đây không?

+0

Hãy thử thay đổi '-' thành' + ' – inspectorG4dget

+0

Có câu hỏi khi tôi sử dụng + nó thực sự trừ, đó là lý do tại sao tôi đang bối rối ?? –

Trả lời

5

Bạn đang tạo một timedelta âm. Giá trị của time.timezone là tiêu cực:

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

Ở đây, tôi đang ở UTC + 10, do đó, mã của bạn trở thành:

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

Cảm ơn tôi đã không nhận thấy rằng timezone time trả lại cho tôi giá trị âm. –

5

The documentation là rõ ràng:

time.timezone Mức chênh lệch múi giờ địa phương (không phải DST), tính bằng giây phía tây của UTC (âm ở hầu hết Tây Âu, dương ở Mỹ, không ở Anh).

Giá trị UTC dương có múi giờ âm.

Các vấn đề liên quan