Python 怎么格式化时间(不含时区)

from datetime import datetime
from pytz import timezone

tzc = timezone('PRC')
tzu = timezone('US/Hawaii')

time = datetime.utcnow()

print('C:'+time.replace(tzinfo=tzc).astimezone(tz=tzc).strftime('%H'))
print('U:'+time.replace(tzinfo=tzu).astimezone(tz=tzu).strftime('%H'))

结果显示都一样的 ??

阅读 4.6k
3 个回答
from datetime import datetime
from pytz import timezone

tzc = timezone('Asia/Shanghai')
tzu = timezone('US/Hawaii')

time_c = datetime.now(tzc)
time_u = datetime.now(tzu)

print('C:'+time_c.strftime('%Y/%m/%d %H:%M:%S'))
print('U:'+time_u.strftime('%Y/%m/%d %H:%M:%S'))
                                               
In [2]: now = datetime.utcnow()                
                                               
In [3]: now.strftime?                          
Docstring: format -> strftime() style string.  
Type:      builtin_function_or_method          
                                               
In [4]: now.strftime('%Y/%m/%d %H:%M:%S')      
Out[4]: '2017/09/20 12:18:32'                  

时刻注意,datetime.datetime.utcnow()函数返回的时间是naive类型,而非aware类型。naive类型是不该被进行时区转换的(因为它本身就不包含时区信息)。
所以,我们需要先将该函数返回的时间,手动转换成aware类型,使用.replace()方法或者.astimezone()方法都可以。

>>> import datetime as dt
>>> from pytz import timezone
>>> tzc = timezone('PRC')
>>> tzu = timezone('US/Hawaii')
>>> utc = timezone('UTC')
>>> now = dt.datetime.utcnow() #返回的是个naive类型,而非aware类型
>>> print(now.replace(tzinfo=utc).astimezone(tz=tzc))
2019-08-17 15:35:17.510877+08:00
>>> print(now.replace(tzinfo=utc).astimezone(tz=tzu))
2019-08-16 21:35:17.510877-10:00