from django.utils import timezone
time_zone = timezone.get_current_timezone_name() # Gives 'Asia/Kolkata'
date_time = datetime.time(12,30,tzinfo=pytz.timezone(str(time_zone)))
现在我需要将此时间转换为UTC格式并将其保存在Django模型中。我无法使用date_time.astimezone(pytz.timezone('UTC'))
。如何将时间转换为UTC。另请回到' time_zone'。
这是用户在文本框中输入时间的用例,我们需要以UTC格式节省时间。每个用户还将从Django timezone
模块中选择他自己的时区。
一旦用户请求退回保存的时间,就必须在他选择的时区内将其显示给他。
答案 0 :(得分:14)
使用完整的datetime
对象,这些事情总是更容易,例如:
import datetime
import pytz
time_zone = pytz.timezone('Asia/Kolkata')
# get naive date
date = datetime.datetime.now().date()
# get naive time
time = datetime.time(12, 30)
# combite to datetime
date_time = datetime.datetime.combine(date, time)
# make time zone aware
date_time = time_zone.localize(date_time)
# convert to UTC
utc_date_time = date_time.astimezone(pytz.utc)
# get time
utc_time = utc_date_time.time()
print(date_time)
print(utc_date_time)
print(utc_time)
收率:
2014-07-13 12:30:00+05:30
2014-07-13 07:00:00+00:00
07:00:00
现在对我来说。
答案 1 :(得分:-1)
在settings.py中将时区设置为UTC。以特定格式获取用户输入的时间和时区。假设您将用户时间设置为'Jul-7-2014 12:35 PM:30'(考虑在html中使用日期输入)。
from datetime import datetime, timedelta
// convert the time to standard format
user_date = datetime.strptime('Jul-7-2014 12:35PM:30', '%b-%d-%Y %I:%M%p:%S')
user_date_string = user_date.strftime('%Y-%m-%d %H:%M:%S')
// save the time to model with users timezone
// now when user asks back for his time, add the timezone with timedelta
user_date = datetime.strptime(user_date_string, '%Y-%m-%d %H:%M:%S')
user_date = user_date + timedelta(hours = 5, minutes = 30)
// finally display it
print user_data.strftime('%Y-%m-%d %H:%M:%S')
*这不考虑django inbuild datetime函数,它返回datetime模型字段的datetime对象。如果实施它会更简单