2012-05-07 10 views
15

मैं पाइथन में एक वेब-आधारित ईमेल क्लाइंट लिख रहा हूं और एक प्रश्न उठ गया है कि किस समय क्षेत्र को ईमेल के "दिनांक" शीर्षलेख को भेजते समय प्रदर्शित किया जाना चाहिए। खंड 3.3 मेंईमेल "हेडर" को प्रेषक का स्थानीय समय या यूटीसी होना चाहिए?

RFC 2822 कहता है:

दिनांक और समय दिन-का-स्थानीय समय व्यक्त करना चाहिए।

यह मेरे लिए संदिग्ध लगता है; सवाल किसके स्थानीय समय है? ईमेल सर्वर, या प्रेषक? स्वाभाविक रूप से मैं प्रेषक (जो कि किसी भी समय क्षेत्र में हो सकता है, और उनकी खाता वरीयताओं में बदला जा सकता है) मान लेगा। जब मैंने पाइथन के email.utils.formatdate फ़ंक्शन को देखा तो यह और भ्रम उत्पन्न हुआ जो कि केवल दो विकल्प प्रदान करता है: यूटीसी या स्थानीय समय (सर्वर का)। मेरे लिए वैकल्पिक टाइमज़ोन निर्दिष्ट करने का कोई विकल्प नहीं दिखता है, या क्या मुझे कुछ याद आ रहा है?

time.mktime(senders_tz_aware_now_datetime.timetuple()) का उपयोग करके प्रारूपित करने के लिए समय सारिणी पास करना यूटीसी दिनांक स्ट्रिंग में परिणाम देता है, जो आरएफसी ऊपर बताता है कि गलत क्या लगता है।

तो कौन सा टाइमज़ोन "दिनांक" होना चाहिए, और उपयुक्त दिनांक स्ट्रिंग बनाने के लिए कोई मानक फ़ंक्शन मौजूद है?

उत्तर

2

बस यूटीसी का उपयोग करें और आप खुश रहेंगे।

Thats क्या हो रहा है जब विनिर्देशों जैसे शब्दों का उपयोग कर रहे हैं। मुझे लगता है कि दोनों को विनिर्देशों से प्रतिबंधित किया जा सकता है क्योंकि वे हमेशा अनियंत्रित जटिलता बना रहे हैं।

यूटीसी का उपयोग पूरी तरह से मान्य है।

+0

यह ऐसा करने वाला नहीं है, मैं समय सारिणी विधि का उपयोग कर समय क्षेत्र जागरूक डेटाटाइम ऑब्जेक्ट को परिवर्तित कर रहा हूं जिसका अर्थ है is_dst पहले से सेट है। इसके अलावा यह मेरे प्रश्न का उत्तर नहीं देता कि सही दिनांक समय का प्रतिनिधित्व क्या है। – kuhnza

+1

मेरे दिमाग को बदल दिया, आसान तरीका जाओ और आपके पास शाम को एक बियर पीने का समय होगा। – sorin

+1

हाहा मुझे आपकी शैली पसंद है। फिर भी, मैं कुछ प्रकार का विचार प्राप्त करना चाहता हूं कि यह आमतौर पर कैसे संभाला जाता है क्योंकि मुझे लगता है कि इसमें कई ईमेल क्लाइंट्स पर प्रभाव पड़ता है जिन्हें मैंने कभी नहीं सुना है कि परीक्षण करने के लिए समय या संसाधनों का अधिकार है। – kuhnza

8

यदि आप आरएफसी का पालन करना चाहते हैं, तो localtime=True पास करें जो स्थानीय समय और सही समय क्षेत्र के साथ दिनांक स्ट्रिंग देता है (माना जाता है कि आपने इसे सही तरीके से सेट किया है)। ,

>>> email.utils.formatdate() 
'Mon, 07 May 2012 19:08:55 -0000' 

-0000 जाहिरा तौर पर यूटीसी इंगित करता है, हालांकि आरएफसी विशेष रूप से +0000 उपयोग करने की सलाह:

>>> email.utils.formatdate(localtime=True) 
'Mon, 07 May 2012 12:09:16 -0700' 

localtime=True के बिना आप एक तारीख स्ट्रिंग UTC समय का प्रतिनिधित्व मिलता है। सुनिश्चित नहीं है कि यह ईमेल.टिल में एक बग है।

यहाँ प्रासंगिक अजगर प्रलेखन है:

वैकल्पिक स्थानीयसमय एक ध्वज है कि जब यह सच है, timeval की व्याख्या, और यूटीसी के बजाय स्थानीय समय क्षेत्र है, ठीक से खाते में डेलाइट बचत समय लेने के लिए एक तिथि रिश्तेदार देता है। डिफ़ॉल्ट गलत है जिसका मतलब यूटीसी का उपयोग किया जाता है।

+0

धन्यवाद, निश्चित रूप से यही वह है जिसे हमने शुरू में सोचा था कि चाल चलती है। दुर्भाग्य से आपका जवाब उस सवाल को उठाता है जिसने मुझे स्टंप किया है: "सही समय क्षेत्र" क्या है? 'Localtime = True' सेट करना सर्वर का समय क्षेत्र देता है, प्रेषक नहीं। इसलिए मेरा प्रश्न, क्या यह सर्वर या प्रेषक का स्थानीय समय क्षेत्र होना चाहिए? कोई यह मान लेगा कि प्रेषक का टाइमज़ोन सही काम है। हालांकि इस मामले में मैं प्रारूप करने के लिए आवश्यक कार्यक्षमता प्रदान करने वाले प्रारूप दिनांक को नहीं देख सकता। – kuhnza

+2

इससे कोई फ़र्क नहीं पड़ता कि प्रेषक किस समय में है जब तक आप एक सतत टाइमस्टैम्प उत्पन्न करते हैं जो उस समय का प्रतिनिधित्व करता है जिस पर ईमेल भेजा गया था। यह सही ढंग से व्याख्या करने के लिए रिसीवर के ग्राहक पर निर्भर करता है। यही कारण है कि @ सोरीन ने यूटीसी के साथ जाने का सुझाव दिया जो सबसे आसान तरीका है। – spinlok

+0

मैं मानता हूं कि इससे कोई फर्क नहीं पड़ता लेकिन यह मुझे परेशान करता है कि आरएफसी का कहना है कि इसे स्थानीय समय के रूप में दिखाना चाहिए। – kuhnza

0

यह "ईमेल क्लाइंट स्थानीय समय" googling जब यह एक शीर्ष परिणाम के रूप में आता है; दुर्भाग्यवश, दो उत्तरों और टिप्पणियों के साथ ही पाइथन कार्यान्वयन को मुश्किल से संबोधित करते हैं, और विषय पंक्ति से बात करने में पूरी तरह असफल हो जाते हैं (जो कि Google प्रतिक्रिया को खिला रहा है)।

आरएफसी स्पष्ट नहीं है क्योंकि यह स्पष्ट है: "^ दिनांक:" हेडर उस समय स्थानीय है जब लिखा गया है। मेल क्लाइंट आमतौर पर "^ दिनांक:" शीर्षलेख लिखता है (मैंने जिन कई कार्यान्वयनों का सामना किया है उनमें से किसी एक में)। अधिकांश (सैनिली कॉन्फ़िगर किए गए) ग्राहकों के लिए यह क्लाइंट के ओएस द्वारा रिपोर्ट की गई स्थानीय समय होगी।

वेबमेल के मामले में, स्थानीय समय उपयोगकर्ता एजेंट द्वारा प्रदान किया जा सकता है (जो आमतौर पर ओएस से स्थानीय समय प्राप्त करता है)। आमतौर पर इसे उपयोगकर्ता द्वारा वेब एप्लिकेशन (ला लामेल) के भीतर सेट किया जाएगा।

महत्वपूर्ण रूप से, यदि आप "आरएफसी का पालन करें" (शायद नेटवर्क प्रोटोकॉल के लिए एक अच्छा विचार), तो ग्राहकों को प्राप्त करने पर परिणामी व्यवहार आमतौर पर प्रेषक द्वारा देखी गई मेल को भेजे जाने की तारीख को दिखाएगा। यह आरएफसी में "चाहिए" का पूरा बिंदु है। जब मैं एक सहयोगी ने ईमेल भेजा था, तो यह पता लगाने की कोशिश करते समय मैं यूटीसी नहीं देखना चाहता; मुझे उनका स्थानीय समय चाहिए। इस तरह, मैं एक कदम (मेरा स्थानीय समय) में समय अंतर को समझ सकता हूं, दो नहीं (उनके स्थानीय समय में स्थानीय समय पर यूटीसी)। मुझे उनके संचार के संदर्भ के बारे में तुरंत संकेत मिलते हैं (क्या यह रात थी? कामकाजी घंटे? आदि)।

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