在使用Django時,默認是開啓對多時區的支持的,在獲取時間的時候會是如下形式:
datetime.datetime(2014, 4, 18, 15, 37, 7, tzinfo=<UTC>)
我們可以利用django.utils.timezone中提供的localtime方法來將該時間轉換爲本地時間:
1
2
3
4
|
>>> dt
datetime.datetime( 2014 , 4 , 18 , 15 , 37 , 7 , tzinfo = <UTC>)
>>> localtime(dt)
datetime.datetime( 2014 , 4 , 18 , 23 , 37 , 7 , tzinfo = <LocalTimezone>)
|
有時候,我們需要將該時間與當前時間做比較,例如計算差值,你可能會想到直接這麼做:
1
2
3
|
>>> import datetime
>>> now = datetime.datetime.now()
>>> now - dt
|
不過這是不對的,並告知如下錯誤:
1
2
3
|
Traceback (most recent call last):
File "<console>" , line 1 , in <module>
TypeError: can't subtract offset - naive and offset - aware datetimes
|
問題就出在利用datetime.datetime.now()得到的當前時間是offset-naive的,而另外一個卻是offset-aware的,因此我們需要將這裏的dt轉成與now一樣的形式,可以這麼做:
1
2
3
4
5
|
>>> dt = dt.replace(tzinfo = None )
>>> dt
datetime.datetime( 2014 , 4 , 18 , 15 , 37 , 7 )
>>> now - dt
datetime.timedelta( 0 , 34108 , 443000 )
|