我在python manager.py shell
中有以下一行:
>>> import pytz
>>> from django.utils import timezone
>>> zone = "Asia/Kolkata"
>>> timezone.activate(pytz.timezone(zone))
>>> timezone.now()
datetime.datetime(2014, 12, 17, 1, 52, 0, 411937, tzinfo=<UTC>)
但我得到的输出仍在使用UTC
。它不应该被转换成“亚洲/加尔各答”吗?
更新
如果我使用下面dazedconfused
建议的命令:
zone = "Asia/Kolkata"
if zone:
timezone.activate(pytz.timezone(zone))
else:
timezone.deactivate()
utc_date = datetime.utcnow()
aware_date = timezone.make_aware(utc_date, timezone.utc)
l_time = timezone.localtime(aware_date, timezone.get_current_timezone())
现在,当我尝试将其保存在我的数据库(Mongolab on Mongolab)上时,它会保存为UTC
我的数据库中有DateTimeField
。
虽然当我将其保存为简单字符串时,它会以当前时区保存,即“Asia / kolkata”输出为字符串:2014-12-17 11:01:53.028852+05:30
答案 0 :(得分:3)
它实际上成功地将当前时区设置为“Asia / Kolkata”
您可以通过以下方式进行验证:
...
>>> timezone.get_current_timezone_name()
'Asia/Kolkata'
现在():
返回表示当前时间点的日期时间。究竟 返回的内容取决于USE_TZ的值:
如果USE_TZ为False,则这将是一个天真的日期时间(即日期时间) 没有相关的时区)表示当前时间 系统的本地时区。
如果USE_TZ为True,则会知道这一点 datetime表示UTC的当前时间。请注意 now()将会 无论TIME_ZONE的值是什么,总是以UTC为单位返回时间;您 可以使用localtime()转换为当前时区的时间。
因此,如果您系统的本地时区是“亚洲/加尔各答”,则可以在USE_TZ
中将False
设置为settings.py
,timezone.now()
将返回您想要的内容
或者,您必须使用localtime()
将时区转换为您的时区(从shell结果继续):
...
>>> import datetime
>>> utc_date = datetime.datetime.utcnow()
>>> aware_date = timezone.make_aware(utc_date, timezone.utc)
>>> timezone.localtime(aware_date, timezone.get_current_timezone())
datetime.datetime(2014, 12, 17, 8, 0, 36, 598113, tzinfo=<DstTzInfo 'Asia/Kolkata' IST+5:30:00 STD>)
最后,here是make_aware()
函数