डेटाबेस से स्ट्रिंग के रूप में दिनांक क्यों नहीं लौटाते हैं?


41

एक विशिष्ट वेब अनुप्रयोग में, तिथियों को डेटाबेस परत से दृढ़तापूर्वक टाइप किया जाता है (उदाहरण के लिए c # में System.DateTime का विरोध System.String के रूप में)।

जब दिनांक को स्ट्रिंग के रूप में व्यक्त करने की आवश्यकता होती है (जैसे पृष्ठ पर प्रदर्शित), तो दिनांक समय से स्ट्रिंग में रूपांतरण प्रस्तुति स्तरीय में किया जाता है।

ऐसा क्यों है? डेटाबेस टियर पर डेटाइम को स्ट्रिंग में बदलना बुरी बात क्यों है?

चैट में गरमागरम बहस भी देखें , और मूल प्रश्न जो इस सब को शुरू करता है


73
मुझे आपसे यह पूछना चाहिए: क्या आप बस हर एक प्रकार को एक स्ट्रिंग में बदल देंगे? क्या दिनांक किसी भी भिन्न बनाता है?
बाग़

7
अच्छा प्रश्न! कृपया यहां प्रगति पर गर्म बहस देखें ।
जॉन वू

8
खैर, यह बहुत स्पष्ट लगता है कि दूसरा लड़का गलत है, और बाकी सब सही है। यहाँ वास्तव में एक सवाल नहीं
गार्डहेड

7
कभी-कभी आपको डेटाबेस के बाहर डेट गणित करने की आवश्यकता होती है। यदि आपके पास तार हैं तो काफी कठिन है।
एरिक किंग

14
एक और समस्या - आपको किस तरह की स्ट्रिंग की आवश्यकता है? एक स्ट्रिंग के रूप में डेटाइम का प्रतिनिधित्व करने के लिए बहुत सारे तरीके हैं। क्या होगा यदि मेरे पास एक डेटाबेस था जो केवल वर्तमान समय को लौटाता था, युग के बाद से # सेकंड के रूप में प्रतिनिधित्व किया, एक स्ट्रिंग के रूप में (उदाहरण के लिए, वर्तमान समय "1474496980" है)। क्या यह उपयोगी होगा? क्या आप उस तरह के डेटाबेस का उपयोग करना चाहेंगे?
रिवलॉक

जवाबों:


168

तिथियां, डेटटाइम्स और वास्तव में किसी भी अन्य टाइप की गई वस्तु को आम तौर पर उनके ठीक प्रकार के प्रारूप में छोड़ दिया जाना चाहिए, जब तक कि आपको उन्हें किसी अन्य प्रकार में बनाने की आवश्यकता न हो - खासकर जब वह प्रकार एक मानव पठनीय रूप है, और विशेष रूप से जब यह एक हानिपूर्ण / रूपांतरण का एकतरफ़ा तरीका।

क्यों? क्योंकि यह माना जाता है कि प्रकार आपको कार्यक्षमता में निर्मित बहुत सारे काम प्रदान करता है, जैसे कि उचित समानता परीक्षण, जोड़ और घटाव, तुलना (इससे अधिक, कम से कम), समय क्षेत्र और स्थानीय कार्यक्षमता (विशेष रूप से किसी भी समय से संबंधित) के लिए, आदि यदि आप तय करते हैं कि आप अमेरिकियों और "महीना दिवस [वें], वर्ष" प्रारूप के साथ-साथ "डे मंथ ईयर" की आम ब्रिटिश शैली, या "वर्ष-माह-दिवस" ​​के आईएसओ मानक का समर्थन करना चाहते हैं? यदि यह एक स्ट्रिंग था और आप उस बदलाव को करने के लिए ज़रूरी है, तो इसे एक तारीख में वापस पार्स करें? यूजी, नो थैंक्स - इस तरह से कई बुराइयाँ और दकियानूसी कीड़े हैं, जिन्हें पूरी तरह से टाला जाता है।

विशेष रूप से, आपने टियर आर्किटेक्चर का उल्लेख किया है, जिसमें प्रस्तुति परत बाद में डेटा से अलग है। यह वास्तव में डेट को डेट के रूप में पास करने का एक और बड़ा कारण है न कि एक स्ट्रिंग - क्योंकि डेट को किस प्रकार के स्ट्रिंग फॉर्मेट में रखा जाना चाहिए? अंग्रेजी, चीनी, सेकंड या मिलीसेकंड, पूरे महीने के नाम या अंकों के साथ, क्या आप बाद में दिनांक फ़ील्ड पर सॉर्ट करना चाहेंगे (स्ट्रिंग पर सॉर्ट करना एक निश्चित स्ट्रिंग प्रारूप की मांग करता है यदि आप इसे सही काम करना चाहते हैं), आदि? यह सभी प्रस्तुति का एक प्रश्न है - उपयोगकर्ता को डेटा को कैसे देखना चाहिए - और उस तर्क को कहीं और रखकर पहली जगह में tiered वास्तुकला होने के लाभ को सीमित करेगा। डेटाबेस को यह जानने या देखभाल करने की आवश्यकता नहीं है कि आप भविष्य में तारीख को कैसे देखना चाहते हैं।

अंत में, लगभग सभी जटिल अनुप्रयोग (जो कि टियर आर्किटेक्चर के लिए हैं) जो समय के बारे में परवाह करते हैं, अनिवार्य रूप से कई अलग-अलग स्तरों पर और कई बार, कई अलग-अलग तरीकों से समय / तिथियों का उपयोग करेंगे। समय और तिथियों से संबंधित टाइप की गई वस्तुएं वास्तव में अच्छे कारण के लिए मौजूद हैं: समय ही, और विशेष रूप से मानव कैलेंडर सिस्टम, अजीब और कठिन हैं। अंततः समय और तारीख एक ही कारण के लिए तार नहीं हैं कि पूर्णांक और फ्लोटिंग पॉइंट तार नहीं हैं, और यह केवल आपके जीवन को कठिन बना देगा यदि आप नाटक करने का प्रयास करते हैं तो वे वास्तव में केवल वर्णों के सरणियाँ हैं, क्योंकि वे अभी नहीं हैं।


26
+1 केवल डस्टर्डली शब्द का उपयोग करने के लिए। मैं आपके सम्मोहक तर्कों और व्यापक स्पष्टीकरण से सहमत हूं, लेकिन इसीलिए मुझे आपके लिए लॉग इन और वोट करना पड़ा।
एड्रियन लार्सन

1
अतीत में परिभाषित समय के बाद सेकंड के रूप में डेटाटाइम का प्रतिनिधित्व करना विभिन्न कैलेंडर के बीच भी मजबूत है। उदाहरण के लिए, इस्लामिक और चीनी कैलेंडर ग्रीज्रियन महीनों, वर्ष की संख्या आदि का उपयोग नहीं करते हैं। मैं इसे डेटाबेस स्तर पर खराब अभ्यास के रूप में संभालने पर विचार करूंगा।
rexkogitans

तिथियों को अक्सर "एक्स दिनों पहले" के रूप में प्रस्तुत किया जाता है। सौभाग्य है कि मूल मूल्य पर वापस लौट रहा है।
एजेंट_ 12

5
आइए, डीएसटी परिवर्तन (और अन्य समान) मुद्दों को भी न भूलें। क्या "Nov 6, 2016 1:30:26 AM" पहली बार या दूसरी बार होगा कि यह तारीख और समय हुआ होगा? यूटीसी डेटाइम कम से कम अद्वितीय है और आप इसे हमेशा उस समय के लिए स्थानीय प्रतिनिधित्व में अनुवाद कर सकते हैं - दूसरे तरीके से वापस जाना हमेशा संभव नहीं होता है।
जे ...

3
Why? Because it is assumed that the type provides you with lots of handy built in functionalityमेरी राय में यह सिर्फ गौण है। असली कारण यह है कि प्रकार आपको बताता है कि कुछ क्या है । एक तारीख एक स्ट्रिंग नहीं है, यह सिर्फ मानव-पठनीय स्ट्रिंग में आसानी से अनुवाद करने के लिए होता है।
डोभाल

53

वह डेटा समय को स्ट्रिंग में बदलने के लिए वेब सर्वर का उपयोग करने के लिए कह रहा है। मैं कह रहा हूँ कि यह डेटाबेस सर्वर पर है और वेब सर्वर पर नहीं। आपको क्यों लगता है कि बेहतर है? - एमटी हेड

मैं टाइप जानना चाहता हूं।

मुझे वास्तव में परवाह नहीं है अगर आपका डेटाबेस एक स्ट्रिंग, कुछ ints या बाइट्स में जानकारी संग्रहीत करता है, क्योंकि, अंत में यह हमेशा वैसे भी बाइट्स होता है। आपके डेटाबेस में जरूरत से ज्यादा जगह लेने वाली स्ट्रिंग मुझे परेशान नहीं करती है। मुझे इस तरह तारीखों में परेशान कर रहा है:

2016/11/10

और यह नहीं पता कि यह ग्यारहवां महीना है या दसवां महीना।

लेकिन यह मान्य है कि आप कहते हैं। सुनिश्चित करें कि आपने इसे सत्यापन प्रक्रियाओं के माध्यम से रखा है। तारीख पूरी तरह से सही है। लेकिन यहां मैं इस बात को बनाए रख रहा हूं और मुझे पता है कि तारीख एक तार है। मैं आपको यह भी नहीं बता सकता कि यह किस तारीख को है।

"नवंबर के दसवें दिन हमारे स्वामी के दो हजार सोलहवें वर्ष में।"

वह एक तार है। हमारी एक प्रस्तुति को उस प्रारूप में इसकी आवश्यकता है। आपने कहा कि डेटाबेस सभी तिथियों को स्ट्रिंग्स में कनवर्ट करता है? उसके साथ मज़ा लें।

डेटाबेस का काम डेटा को प्रस्तुत करना है जो डेटा को प्रस्तुत नहीं करता है। ज़रूर, आप इसे स्ट्रिंग्स में कर सकते हैं लेकिन फिर आपको इसे अन्य प्रारूपों के लिए पेश करने के लिए उपयोगी बनाना होगा। जो भी डीबी ऑफर करता है वह हमें एक प्रस्तुति के लिए तैयार होने के करीब के रूप में प्राप्त करने के लिए जो भी मिलता है, उसे एक मानक पार्स रूप में संग्रहीत करना। यह वास्तव में मेरे लिए कोई बात नहीं है अगर DB एक स्ट्रिंग या ints या बाइट्स के साथ टाइप करता है। जब तक यह जानता है कि यह क्या कर रहा है।

लेकिन जब आप डीबी को यह बताने नहीं देते हैं कि हम एक तिथि के साथ काम कर रहे हैं और एक तारीख को एक स्ट्रिंग के रूप में संग्रहीत करते हैं जो आप समय से पहले प्रस्तुत कर रहे हैं और अन्य सभी पर एक प्रस्तुति के पक्ष में हैं। यह अन्य सभी प्रस्तुतकर्ताओं को परिवर्तित करने से पहले पार्स करने के लिए मजबूर करता है। नहीं, डेटाबेस प्रेजेंटेशन लेयर का हिस्सा नहीं है। यह मत पूछो।

इसी तरह प्रेजेंटेशन लेयर डेटाबेस का हिस्सा नहीं है, इसलिए किसी रिपोर्ट को डेटाबेस डिटेल्स में जोड़े रखना समझदारी नहीं है। यह प्रकारों पर कार्रवाई करने के लिए कहीं अधिक मजबूत है।


यह उत्तर संग्रहण को स्ट्रिंग्स के रूप में संबोधित करता है। हालाँकि, यह दिनांक को मूल दिनांक प्रकार में संग्रहीत करने के सामान्य पैटर्न को संबोधित नहीं करता है, लेकिन फिर CONVERT (T-SQL) जैसे कार्यों का उपयोग करते हुए SQL क्वेरी में एक स्ट्रिंग को प्रारूपित करता है , और न ही एक DBMS आमतौर पर इसकी तिथियों को क्रमबद्ध करता है। जो भी क्वेरी है, उसे एक कॉन्फ़िगर करने योग्य प्रारूप में एक स्ट्रिंग में। उदाहरण के लिए: postgresql.org/docs/9.5/static/…
dcorking

वह एक रिपोर्ट है। यह भंडारण के बाद होता है। जैसे मेरी जन्मतिथि को मेरी उम्र में बदलना।
कैंडिड_ऑरेंज सेप

2
मैं केवल आपको अपना उत्तर देने के लिए प्रोत्साहित करना चाहता था, क्योंकि ओपी का विषय यह है कि " डेटाबेस परत से तिथियां कैसे प्राप्त की जाती हैं "। एक अच्छी तरह से स्थापित है, हालांकि यकीनन पदावनत, पैटर्न, जहां एक रिपोर्ट स्वरूपित और स्थानीयकृत तार के लिए डेटाबेस पर सवाल उठाती है। मुझे लगता है कि ओपी उन वंचित तर्कों को सुनना चाहेंगे। मुझे पता है मैं करूंगा।
dcorking

@dcorking नोट अपडेट
कैंडिड_ऑरेंज सेप

+1 मिल में और अधिक पानी जोड़ना: बस एक स्थापित बेस पर एक सिस्टम बनाएं जो कई टाइमज़ोनों को फैलाता है जहां पूर्ण तत्काल सर्वोपरि है और देखें कि आप स्ट्रिंग के साथ कितना अच्छा करते हैं <-> हर जगह टाइमस्टैम्प रूपांतरण। सबसे खराब, लोगों के लिए अपने स्वयं के प्लगइन्स बनाने के लिए एक एक्स्टेंशन बिंदु बनाएं और उन्हें टाइमस्टैम्प दें क्योंकि स्ट्रिंग्स यह देखते हैं कि ये टाइमस्टैम्प कैसे संगत होंगे!
न्यूटोपियन

19

स्थान

प्रस्तुति उद्देश्यों के लिए तारीख में परिवर्तन करने के लिए उपयोगकर्ता वरीयताओं को जानने की आवश्यकता होती है, क्योंकि ठीक उसी तिथि को आम तौर पर विभिन्न स्थानों के उपयोगकर्ताओं के लिए अलग-अलग प्रदर्शित किया जाना चाहिए। यहां तक ​​कि अगर आप अपने आवेदन में एक भी लोकेल का उपयोग करते हैं, तो उचित व्यवहार को डेटाबेस सर्वर के बजाय एप्लिकेशन के लोकेल का उपयोग करना चाहिए ; और वे इस समय भी समान होने की गारंटी नहीं देते हैं, भले ही वे संयोग से मेल खाते हों।

एक सार्वभौमिक दिनांक डेटाटाइप से स्थानीय-विशिष्ट स्ट्रिंग में रूपांतरण प्रस्तुति परत में होना चाहिए क्योंकि यह वह परत है जो जानता है कि रूपांतरण कैसे किया जाना चाहिए।


3
स्थानीय बेमेल के वास्तविक जीवन उदाहरण के लिए, मेन, यूएस उपयोगकर्ताओं के लिए एक ऐप लिखने की कल्पना करें और फिर इसे अमेज़ॅन के पश्चिमी तट सर्वर फ़ार्म में होस्ट किया जाए। ;) यह वास्तव में एक स्थिति की संभावना नहीं है।
jpmc26

@ jpmc26 मुझे अंतर समझ में नहीं आता - क्या मेन अमेरिका के बाकी हिस्सों में एक अलग तारीख प्रारूप का उपयोग करता है?
पीट किर्कम

2
@PeteKirkham मेन और अमेरिका के पश्चिमी तट 3 घंटे अलग-अलग हैं।
jpmc26

1
या एक और वास्तविक जीवन परिदृश्य: स्विट्जरलैंड में एक सर्वर चलाने की कल्पना करें जिसे चार (जर्मन, फ्रेंच, इतालवी, अंग्रेजी) ग्राहकों को विभिन्न स्थानों (और थोड़ा अलग स्वरूपण नियमों) के साथ अलग-अलग भाषाओं में सेवा करनी है । ऐसी स्थिति में अपने सर्वर के लिए सही स्थान चुनने का सौभाग्य।
वू

1
@ jpmc26 टाइमज़ोन और स्थान समान नहीं हैं। उदाहरण के लिए, ग्लासगो स्कॉटलैंड, अटलांटा यूएसए और पुणे भारत में हमारे कार्यालय हैं। इन कार्यालयों में परामर्शदाता बारी-बारी से दुनिया भर के स्थलों (परिसरों, अस्पतालों, होटलों आदि) की निगरानी करते हैं। अनुप्रयोग डेटाबेस UTC में काम करता है लेकिन साइट की निगरानी के लिए स्थानीय समय में बार प्रदर्शित करता है। यूएसए सलाहकारों के पास एमएम / डीडी / वाईवाईवाईवाई के लिए स्थानीयकृत तारीखें हैं, लेकिन यूके और भारत के स्थान डीडी / एमएम / वाईवाईवाईवाई हैं - यह लोकेल पर निर्भर करता है, साइट या उपयोगकर्ता के समय क्षेत्र पर नहीं।
पीट किरकम

9

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


4

एक कारण के लिए प्रकार मौजूद हैं, अगर उन्होंने कोई लाभ नहीं जोड़ा तो हम उनके पास नहीं होंगे और उनका उपयोग नहीं करेंगे और हमारे पास सिर्फ "प्रकार" होगा और सब कुछ ऐसा होगा। वे न केवल सुविधाजनक हैं, वे सुरक्षा और दक्षता भी जोड़ते हैं। निम्नलिखित इस बात की एक सूची है कि आपको हमेशा अपने मूल स्वरूप में प्रकारों को बनाए रखना चाहिए न कि तार के रूप में । मैंने DateTimeज्यादातर समय एक उदाहरण के रूप में इस्तेमाल किया, लेकिन समान सिद्धांत किसी भी आदिम प्रकार के लिए लागू होते हैं जैसे पूर्णांक, दशमलव, बाइनरी, आदि।


डेटा भंडार

प्रतिबन्ध

बाधा लिखें

लगभग सभी डेटा स्टोर डेटा पर बाधाओं को निर्दिष्ट करने की अनुमति देते हैं, इसमें प्रकार की बाधाएं शामिल हैं। एक DateTimeउदाहरण निर्दिष्ट करने का एक मुख्य लाभ यह है कि संग्रहीत डेटा उस प्रकार के लिए विवश होगा। स्टोर में डेटा कैसे डाला गया था, इसकी परवाह किए बिना डेट टाइम के अलावा कुछ भी दर्ज करना संभव नहीं होगा। उत्तरार्द्ध बड़ी प्रणालियों के लिए महत्वपूर्ण है जहां कई प्रक्रियाएं होती हैं जो सीधे स्टोर के साथ बातचीत करती हैं। इसमें 30 फरवरी (और किसी भी वर्ष) की तरह दोषपूर्ण तारीखों को जोड़ने की कोशिश भी शामिल है क्योंकि फरवरी में केवल एक लीप वर्ष पर 29 दिन और गैर लीप वर्ष के लिए 28 दिन हो सकते हैं।

वैधव्य बाधा

सत्यापन बाधाएं भी हैं जो डेटा स्टोर में कार्यान्वित की जा सकती हैं जैसे कि यह सुनिश्चित करना कि एक सम्मिलित तिथि वर्तमान तिथि से अधिक नहीं है या अंतिम तिथि से पहले एक प्रारंभ तिथि होती है।

संचालन

अधिकांश डेटा स्टोरों ने संचालन / कार्यों में DateAddया जैसे DatePartMS Sql Server में भी बनाया है । इससे आप विशिष्ट डेटा को फ़िल्टर करना या चयन करना शुरू कर सकते हैं, जबकि डेटा अभी भी स्टोर में है (अभी तक एप्लिकेशन को पुनर्प्राप्त नहीं किया गया है)।

विश्वविद्यालय द्वारा स्वीकृत प्रारूप

देशी प्रकार के अन्य डेवलपर्स या सिस्टम का उपयोग करके जो कि स्टोर के साथ इंटरैक्ट करते हैं, को भी इस बात की जानकारी नहीं देनी चाहिए कि यह कैसे आदिम प्रकार संग्रहीत किया जाता है। यह मामला नहीं है यदि उस प्रकार को एक स्ट्रिंग के रूप में संग्रहीत किया गया था, तो आपको यह सुनिश्चित करना होगा कि हर कोई उस DateTimeस्ट्रिंग प्रतिनिधित्व के प्रारूप को समझता है । डेटा के मूल, क्षेत्रों, और संस्कृतियों में डेटा उत्पत्ति, किसी एप्लिकेशन का भौतिक स्थान और उस डेटा के साथ सहभागिता करने वाले अंतिम उपयोगकर्ता / सिस्टम की विशेषताओं के साथ व्यवहार करते समय यह प्रणाली नाजुक हो जाती है। उदाहरण: एक देश में दिनांक प्रारूप MM / dd / yyyy (अमेरिका की तरह) हो सकता है, लेकिन दूसरे में यह dd / MM / yyyy हो सकता है, यह पता लगाना कि अंतर लगभग असंभव हो जाता है।

गति

पुनर्प्राप्ति की गति, सत्यापन की गति, संचालन की गति और भंडारण दक्षता भी सभी महत्वपूर्ण कारक हैं। पुनर्प्राप्ति गति का उदाहरण: डेटा स्टोर स्तंभों पर अनुक्रमित करने की अनुमति देते हैं और ये अनुक्रमणिका आमतौर पर अधिक कुशलता से उपयोग की जा सकती हैं यदि प्रकार अपने मूल प्रारूप में संग्रहीत है।

आवेदन

डेटा प्राप्त करना

डेवलपर्स के रूप में देशी प्रकार की प्रणाली का उपयोग करके स्टोर के खिलाफ एक्ज़ेक्यूटिंग क्वेश्चन सरल हो जाते हैं, एक बार फिर से स्टोरेज फॉर्मेट का अनुमान नहीं लगाना पड़ता है। लगभग सभी डेटा स्टोर एप्लिकेशन प्रदाता ( उदाहरण: ado.net ) पास किए गए देशी प्रकारों के आधार पर उचित पैरामीटरयुक्त प्रश्न बनाने के लिए तंत्र प्रदान करते हैं। यहां एक Sql सर्वर स्टोर के खिलाफ ado.net क्वेरी में दिनांक भाग को जोड़ने का एक उदाहरण है, स्ट्रिंग्स के साथ भी ऐसा ही करना बेहद बोझिल और नाजुक / त्रुटि प्रवण होगा।

command.Parameters.Add(new SqlParameter("@startDate", SqlDbType.Date) {Value = myDateInstance.Date});

संचालन

कोड में मूल प्रकार भी .net प्रकार जैसे मानक संचालन के लिए प्रदान करते हैं System.Date। परिचालन आमतौर पर प्रकृति में गणितीय होते हैं जैसे तिथियां जोड़ना, तिथियों के बीच का अंतर खोजना आदि, फिर से, स्ट्रिंग प्रकारों पर आसानी से करना संभव नहीं है।

प्रस्तुति अंश

स्थान

जब एक आदिम प्रकार को अंततः प्रस्तुति परत में स्ट्रिंग में परिवर्तित किया जाता है ( ऐसा करने के लिए प्रोग्राम स्टैक में सही स्थान ) तो प्रोग्रामर के पास अब उस संदर्भ के अनुसार इसे सही ढंग से प्रदर्शित करने के लिए विभिन्न विकल्प हैं। इस संदर्भ में आम तौर पर डेटा का वास्तविक अर्थ और उपयोगकर्ता का स्थान शामिल होता है।

उदाहरण 1

उपयोगकर्ता के स्थान के आधार पर एक डेटाटाइम उदाहरण स्वचालित रूप से स्वरूपित किया जा सकता है।

DateTime.Now.ToString("D", CultureInfo.GetCultureInfo(userContext.Culture))
उदाहरण 2

एक दशमलव उदाहरण एक राशि (मुद्रा) का प्रतिनिधित्व कर सकता है और उपयोगकर्ता के स्थान को तब भी अपनी पसंद के अनुसार राशि प्रदर्शित करनी चाहिए। एक c # एप्लिकेशन का उपयोग करके मूल्य प्रदर्शित हो सकता है

amount.ToString("C", CultureInfo.GetCultureInfo(userContext.Culture))

यह महत्वपूर्ण हो सकता है क्योंकि विभिन्न संस्कृतियां अलग-अलग संख्या प्रदर्शित करती हैं। अमेरिकी अवधि में (।) और अल्पविराम (,) का नीदरलैंड्स की तरह ही सटीक अर्थ है।

स्थान

यह DateTimeउदाहरणों के लिए बहुत विशिष्ट है । एक तिथि और समय एक विशिष्ट समय में एक घटना का प्रतिनिधित्व करता है लेकिन यह आमतौर पर अपने स्वयं के क्षेत्र के आधार पर उपयोगकर्ता को सूचित / प्रस्तुत किया जाना है। उदाहरण: संयुक्त राज्य अमेरिका में पूर्वी टाइमज़ोन में एक उपयोगकर्ता के लिए एक DateTimeउदाहरण 2016-09-21T23:38:21.399Zप्रदर्शित किया जा सकता है 9/21/2016 5:21 PM। इसे पूरा करने के कई तरीके हैं लेकिन यह असंभव के बगल में हो जाता है अगर तारीख समय उदाहरण को एक स्ट्रिंग प्रकार के रूप में या डेटा स्टोर में एक स्ट्रिंग प्रकार के रूप में मेमोरी में रखा जाता है।


सामान्य नियम

किसी अनुप्रयोग के लिए सामान्य 2 नियम तब आते हैं जब किसी भी आदिम प्रकार को स्ट्रिंग प्रतिनिधित्व में बदलने की बात आती है

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

0

जब तक आप अपनी तिथि के लिए गैर-अस्पष्ट प्रारूप का उपयोग कर रहे हैं, ऐसा करने में (सेवाओं में यह हर समय किया जाता है) ऐसा करने में वास्तव में कुछ भी गलत नहीं है। स्पष्ट रूप से, मेरा मतलब है कि न केवल तारीख स्पष्ट है (जैसे एमएम / डीडी बनाम डीडी / एमएम) लेकिन यह भी कि वह किस समय में है। इसलिए अप-फ्रंट, यदि आप पाठ के रूप में अपनी तारीखों का प्रतिनिधित्व करने जा रहे हैं, तो एक आईएसओ प्रारूप का उपयोग करें। । मैं UTC आधारित टाइम स्ट्रिंग्स को दृढ़ता से पसंद करता हूं।

पेशेवरों:

  • मानक आधारित तिथि / समय स्ट्रिंग्स पोर्टेबल और समझने में आसान हैं
  • डीबी में अक्सर तिथियों में एक समय घटक होता है। यदि यह आपके डेटा के लिए सार्थक नहीं है, तो यह वास्तव में चीजों को सरल कर सकता है।

विपक्ष:

  • डेटा का आकार। डीबी में एक तारीख का आंतरिक प्रारूप आम तौर पर उस तारीख के स्ट्रिंग प्रतिपादन की तुलना में बहुत कम जगह का उपयोग करेगा।
  • आप आम तौर पर इसे ग्राहक पर एक वास्तविक तारीख या समय संरचना में लाना चाहते हैं ताकि पार्स करने में अतिरिक्त समय लग सके।

अगर किसी ने कहा कि वे ऐसा करना चाहते हैं, तो मैं पूछूंगा "क्यों?" क्योंकि वहाँ वास्तव में यह करने के लिए बहुत कुछ नहीं है। यदि कारण यह है कि कोई स्ट्रिंग के रूप में तारीख को वापस करना चाहता है, क्योंकि वे इसे सीधे प्रदर्शित करेंगे, यह DB से स्ट्रिंग्स का उपयोग करने का एक अच्छा कारण नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.