2010-11-06 9 views
5

मैं Django और Google App Engine पर अजगर का उपयोग कर रहा हूं। मैं अपने मॉडल में से एक में डेटटाइमप्रोपर्टी का भी उपयोग कर रहा हूं। कभी-कभी मैं उस तारीख और समय को उपयोगकर्ता को प्रदर्शित करना चाहता हूं।यूटीसी डेटाटाइम को उपयोगकर्ता की स्थानीय तिथि और समय में कनवर्ट करना

डेटटाइमप्रोपर्टी में संग्रहीत डेटाटाइम को उपयोगकर्ता के डेटाटाइम में कनवर्ट करने के लिए सबसे अच्छा क्या है?

या प्रश्न बनाने के एक और सटीक तरीके: ग्राहक के टाइमज़ोन प्राप्त करने और पाइथन डेटाटाइम ऑब्जेक्ट को अपने स्थानीय समय में बदलने का सबसे अच्छा तरीका क्या है?

+0

संभव डुप्लिकेट : http://stackoverflow.com/questions/4065157/django-time-issues/4065236#4065236 – mouad

+0

बस यह पता लगाया कि क्या स्वीकार है ... धन्यवाद – speedplane

उत्तर

8

यह जीएई की तुलना में एक पाइथन सवाल है, जब तक कि जीएई के पास कुछ सुविधा नहीं है (मैंने त्वरित स्कैन किया है लेकिन कोई संदर्भ नहीं मिला है)।

मूल रूप से, आप उपयोगकर्ता समय क्षेत्र है, जो आप उपयोगकर्ता आईपी (GeoDjango का उपयोग करने से निकालने के लिए कोशिश कर सकते हैं या तो, GAE पर अगर तो उपलब्ध है, या के साथ दिनांक/यूटीसी समय क्षेत्र में बार (उदाहरण के लिए उपयोग datetime.datetime.utcnow) संग्रहीत करना चाहते हैं पायजियोप; आपको कुछ भौगोलिक स्थान डीबी की तरह चाहिए: http://www.maxmind.com/app/geolitecity), या स्पष्ट रूप से इसके बारे में उपयोगकर्ताओं से पूछने के लिए - जिसका लाभ है कि आप "यूरोप/वॉरसॉ" जैसे वर्णनात्मक टाइमज़ोन नाम के लिए पूछ सकते हैं। यदि आप केवल यूटीसी + 2 के लिए पूछते हैं, तो आप डीएसटी बदलावों का कोई संकेत खो देते हैं।

फिर, आप utc से वांछित टाइमज़ोन में स्थानांतरित कर सकते हैं उदा। pytz:

import pytz 
local_tz = pytz.timezone(timezone_name) 
return timestamp_utc.replace(tzinfo=pytz.utc).astimezone(local_tz).replace(tzinfo=None) 

- जहां timestamp_utc यूटीसी datetime है कि आप परिवर्तित करना चाहते है, और TIMEZONE_NAME उल्लेख "यूरोप/वारसा" है।

(ध्यान दें कि मैं नहीं जानता कि जो GAE में इन कार्यों के, लेकिन कम से कम आप के लिए देखने के लिए क्या पता चल जाएगा)

+0

यह मैंने सोचा जितना जटिल है। स्पष्ट रूप से पूछते हैं कि उपयोगकर्ता प्रश्न से बाहर हैं। GeoDjango जीईओ से संबंधित सामान के सभी प्रकार के लिए एक विशाल पुस्तकालय की तरह दिखता है, मैं बस आईपी पते को समय क्षेत्रों में परिवर्तित करना चाहता हूं। यहां तक ​​कि pytz वास्तव में बड़ा लगता है। – speedplane

3

तो मैं इस में थोड़ा अधिक शोध किया। टाइमज़ोन सही ढंग से करने के लिए, आपको टॉमसज़ के जवाब में वर्णित कुछ का पालन करना होगा। हालांकि, अगर आप थोड़ा सा कड़वाहट सहन करने के इच्छुक हैं, तो आप बहुत कम प्रयास के साथ 90% रास्ते प्राप्त कर सकते हैं।

में उपयोगकर्ता के लॉग या अपनी साइट पर किसी भी कार्रवाई, आप जावास्क्रिप्ट का उपयोग कर सकते है उनके वर्तमान समय क्षेत्र ऑफसेट और फिर अपने अगले अनुरोध में भेजने के लिए जब:

var offset = (new Date()).getTimezoneOffset() 
$.post("post.html", "offset="offset.toString(), ...); 
बेशक

इस मान लिया गया है कि उपयोगकर्ता सही ढंग से अपने वर्तमान टाइमज़ोन सेट कर दिया है। टेम्पलेट्स में गूगल एप इंजन दिनांक परिवर्तित करने के लिए

+0

आह, बहुत अच्छा, मुझे यह नहीं पता था। फिर भी, यदि आप उदा। एक सीआरएम, तो आप डीएसटी जैसे subtleties उपेक्षा नहीं कर सकते हैं। –

संबंधित मुद्दे