2014-07-12 2 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 형식으로 변환하고 장고 모델에 저장해야합니다. date_time.astimezone(pytz.timezone('UTC'))을 사용할 수 없습니다. 어떻게 시간을 UTC로 변환 할 수 있습니까? 또한 'time_zone'(으)로 돌아갑니다.Python 변환 시간을 UTC 형식으로 변환

이것은 사용자가 텍스트 상자에 시간을 입력하고 시간을 UTC 형식으로 저장해야하는 유스 케이스입니다. 각 사용자는 Django timezone 모듈에서 제공하는 자신의 시간대를 선택합니다.

사용자가 저장된 시간을 다시 요청하면 선택한 시간대에 다시 표시해야합니다.

답변

12

이런 일들은 :,

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) 

수익률을 예컨대을 완료 datetime 개체를 사용하여 항상 쉽게 :

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

또한'tzinfo '에 시간대를 직접 할당하는 대신'localize'를 사용해야합니다. [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') 

*이 날짜 모델 필드에 날짜 객체를 반환 장고 inbuild 날짜 기능을 고려하지 않습니다. 더 간단 할 것이다 구현 경우