2011-07-14 15 views
5

में अमान्य तिथियों की इजाजत देता है डेटाटाइम मॉड्यूल दिनांक सत्यापन और गणित करता है जो वास्तविकता की परवाह करते समय ठीक है।पाइथन डेटाटाइम

मुझे ऐसी ऑब्जेक्ट की आवश्यकता है जो उत्पन्न होने वाली तिथियां हो, भले ही वे अमान्य हों। दिनांक समय बहुत सख्त है क्योंकि कभी-कभी मुझे केवल वर्ष या वर्ष और महीने ही पता होता है और कभी-कभी मेरे पास 2011-02-30 जैसी तारीख होती है।

क्या वहां कोई मॉड्यूल है जो डेटाटाइम की तरह है लेकिन यह अमान्य तिथियों को संभाल सकता है?

यदि नहीं, तो संभवतः कम कार्यक्षमता के रूप में डुप्लिकेट करते समय इसे संभालने का सबसे अच्छा तरीका क्या है और अभी भी दिनांक गणित को करने के दौरान संभव है?

अद्यतन इस के लिए

प्रेरणा कई सिस्टम है कि दिनांक का उपयोग करें और समय की बुनियादी सामान्य पर्वतमाला बताने के लिए क्षमता चाहने के अलावा अमान्य तिथियां (mysql और पर्ल) के बारे में परवाह नहीं है के साथ एकीकरण है। अस्पष्ट तिथि गणित के लिए समय की ज्ञात इकाई की शुरुआत से शुरू होता है (यदि मैं वर्ष और महीने जानता हूं लेकिन दिन नहीं, तो पहले का उपयोग करें, अगर मुझे वर्ष पता है लेकिन कोई महीना या दिन नहीं, पहले जनवरी का उपयोग करें)। यह आखिरी बिट जरूरी नहीं है लेकिन अच्छा होगा और मुझे लगता है कि यह सामान्य बात नहीं है क्योंकि जिन लोगों को विशेष केस डेट गणित की आवश्यकता है, वे शायद इसे स्वयं बनायेंगे।

मेरे पास होने वाले प्रमुख मुद्दों में से एक है msql से sqlalchemy और mysqldb का उपयोग करके पाइथन में दिनांक लोड हो रहा है - यदि आप किसी दिनांक कॉलम से MySQL को मानते हैं जो mysql में '2011-01-00' जैसा दिखता है, तो आपको मिलता है अजगर में कोई नहीं। यह किसी भी खिंचाव से ठंडा नहीं है।

+1

गणित की तारीख तब तक कठिन नहीं होगी जब आप नहीं जानते कि हर महीने कितने दिन कहते हैं? हो सकता है कि मैं समझ में नहीं आता कि आप क्या खोज रहे हैं। –

+0

@Pat B मेरा अनुमान होगा: प्रस्थान होने तक वास्तविक जीवन मानें। इसके अलावा, @SynapticUnderrun आपको कुछ और प्रतिक्रियाएं मिल सकती हैं यदि आपने समझाया कि आप क्यों चाहते हैं/इसकी आवश्यकता है (इसके अलावा मुझे बस दिलचस्पी है)। – Wilduck

+1

यदि आपको परवाह नहीं है कि तिथि मान्य है या नहीं, तो इसे एक स्ट्रिंग के रूप में स्टोर करें। डेटाटाइम मॉड्यूल आंतरिक रूप से युग का समय उपयोग करता है ताकि यह कैलेंडर का पालन करेगा। समय क्षेत्र समर्थन के लिए pytz मॉड्यूल भी देखें यदि यही कारण है कि आप सहिष्णुता के बारे में चिंतित हैं। – wberry

उत्तर

2

यदि डेटाटाइम मॉड्यूल बहुत सख्त है, तो उसे अज्ञात मानों के लिए शून्य के साथ एक स्ट्रिंग या टुपल के रूप में संग्रहीत करें।

संपादित आप mysql से अजगर में अनुवाद में समस्या आ रही है, तो, अपने आप को एक एडाप्टर वर्ग बारे में एक सुरक्षित तरीका में रूपांतरण करने के लिए (Changing attribute behaviour देखें)।

EDIT2 एक सरल विकल्प अपने सभी एसक्यूएल दिनांक के माध्यम से चलाने के लिए एक छोटी स्क्रिप्ट लिखने के लिए हो सकता है और वहाँ यानी सुधार करना बदलने 2011-01-00 को 2011-01-01

Edit3 सकता है दस्तावेज़ सुझाव देते हैं कि आप override reflected columns कर सकते हैं ताकि आप अपने टाइमस्टैम्प कॉलम को स्ट्रिंग्स के रूप में देख सकें ... या स्क्लाक्लेमी के बाद के संस्करणों में, आप ओवरराइड के लिए the column_property का उपयोग कर सकते हैं।

+0

मैं टाइमस्टाइम की बजाय अपनी कक्षा का उपयोग करने के लिए mysqldb कैसे प्राप्त करूं? – underrun

+0

एडेप्टर क्लास मजेदार नहीं लगता है, अमान्य तिथियों को बदलना वास्तविक डेटा में परिवर्तन है (मेरे प्रोजेक्ट के दायरे में स्वीकार्य नहीं है, लेकिन कॉलम_प्रोपर्टी स्क्लेल्चेमी विकल्प मुझे लगता है कि वह (जैसा कि एक कलाकार है) मेरे कॉलम का)। – underrun

0

मैंने इस तरह के मॉड्यूल के बारे में नहीं सुना है और ऐसा नहीं लगता कि एक है।

मैं शायद प्रत्येक उदाहरण के लिए दो तिथियों को संग्रहीत करना समाप्त कर दूंगा: 1. मूल इनपुट को स्ट्रिंग के रूप में, जिसमें कुछ भी हो सकता है, यहां तक ​​कि "एन/ए" भी, मूल मूल्य को वापस दिखाने के लिए, और 2. पार्स किया गया और "सामान्यीकृत" डेटाटाइम ऑब्जेक्ट जो इनपुट का सबसे नज़दीकी प्रतिनिधित्व है। इस उद्देश्य के आधार पर मैं नल/कोई भी ऑब्जेक्ट्स को अनुमति नहीं दूंगा जहां इसे वास्तव में अनुमानित नहीं किया जा सकता था (जैसा कि उल्लिखित "एन/ए" केस) या नहीं। यह समाधान आपको "अनुमान" को वापस/बदलने की अनुमति देगा क्योंकि आप कोई जानकारी नहीं खोते हैं।

यदि आपको इसकी परवाह नहीं है, तो एसक्यूएलकेमी डीबी में एक स्ट्रिंग कॉलम में पारदर्शी रूप से ऐसे मूल्यों को पारदर्शी रूप से परिवर्तित करने के लिए अपना कॉलम और डेटा प्रकार घोषित करने की अनुमति देता है।

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