2014-07-12 253 views
3
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'。Python將時間轉換爲UTC格式

這是用戶在文本框中輸入時間並用UTC格式保存時間的用例。每個用戶還將選擇我們從Django timezone模塊提供的自己的時區。

一旦用戶請求恢復保存的時間,它必須在他所選的時區中顯示給他。

回答

12

這些東西使用完整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 

現在對我來說。

+0

謝謝你的作品。 –

+0

當它尚未應用於'datetime'時,它顯示'+5:53:00',因爲這是tzdb中的最早表示。當地的平均時間通常是通過太陽觀測來計算的,這些合理的時間將這些舊的日期合理地對準了我們的現代系統 –

+0

此外,您應該使用'localize'而不是直接將時區分配給'tzinfo'。閱讀[pytz文檔](http://pytz.sourceforge.net/)中的'localize'。 –

-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日期時間函數返回日期時間模型字段的日期時間對象。如果實現,這將是更簡單