简体   繁体   English

Python将时间转换为UTC格式

[英]Python Convert time to UTC format

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

Now I need to convert this time to UTC format and save it in Django model. 现在我需要将此时间转换为UTC格式并将其保存在Django模型中。 I am not able to use date_time.astimezone(pytz.timezone('UTC')) . 我无法使用date_time.astimezone(pytz.timezone('UTC')) How can I convert the time to UTC. 如何将时间转换为UTC。 Also Back to 'time_zone'. 还回到'time_zone'。

This is a use case when user type time in a text box and we need to save time time in UTC format. 这是用户在文本框中键入时间的用例,我们需要以UTC格式节省时间。 Each user will also select his own time zone that we provide from Django timezone module. 每个用户还将选择我们从Django timezone模块提供的timezone

Once the user request back the saved time it must be shown back to him in his selected time zone. 一旦用户请求返回保存的时间,它必须在他选择的时区中显示给他。

These things are always easier using complete datetime objects, eg: 使用完整的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)

Yields: 产量:

2014-07-13 12:30:00+05:30
2014-07-13 07:00:00+00:00
07:00:00

right now for me. 现在对我来说。

set the timezone to UTC in your settings.py. 在settings.py中将时区设置为UTC。 Get the user input of time and timezone in certain format. 以特定格式获取用户输入的时间和时区。 Suppose you get the user time as 'Jul-7-2014 12:35PM:30' (consider using date input in your html). 假设您将用户时间设置为'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')

*this is not considering django inbuild datetime functions which returns datetime object for datetime model field. *这不考虑django inbuild datetime函数,它返回datetime模型字段的datetime对象。 If implemented that it will be more simple 如果实施它会更简单

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM