Aamir Rind
Aamir Rind

Reputation: 39659

datetime and timedelta

My timezone is UTC+5.

So when i do datetime.datetime.now() it gives:

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

I wanted to subtract 5 hours from it so that it becomes equal to datetime.datetime.utcnow() so i did:

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

You see instead of subtracting 5 hours it adds 5 hours into datetime?? Am I doing something wrong here?

Upvotes: 9

Views: 47554

Answers (2)

BrenBarn
BrenBarn

Reputation: 251383

The documentation is clear:

time.timezone The offset of the local (non-DST) timezone, in seconds west of UTC (negative in most of Western Europe, positive in the US, zero in the UK).

So positive UTC values have a negative timezone.

Upvotes: 5

jterrace
jterrace

Reputation: 67063

You're creating a negative timedelta. The value of time.timezone is negative:

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

Here, I'm in UTC + 10, so your code becomes:

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

Upvotes: 11

Related Questions