मैं बहुत कुछ खोज रहा हूं लेकिन समाधान नहीं मिला। आप डेटटाइम से कैसे निपटते हैं जो एक अनियमित मूल्य (शून्य के बराबर) रखने में सक्षम होना चाहिए? मेरे पास एक कक्षा है जिसमें डेटटाइम संपत्ति मान सेट हो सकता है या नहीं। मैं संपत्ति धारक को डेटटाइम में शुरू करने की सोच रहा था। मिनवेल्यू, जिसे आसानी से चेक किया जा सकता था। मुझे लगता है कि यह एक आम सवाल है, आप यह कैसे करते हैं?डेटटाइम "शून्य" मान
उत्तर
सामान्य दिनांक समय के लिए, यदि आप उन्हें बिल्कुल प्रारंभ नहीं करते हैं तो वे DateTime.MinValue
से मेल खाते हैं, क्योंकि यह संदर्भ प्रकार के बजाय एक मान प्रकार है।
DateTime? MyNullableDate;
या उससे अधिक समय फार्म:
तुम भी एक नल दिनांक समय, इस तरह उपयोग कर सकते हैं
Nullable<DateTime> MyNullableDate;
और अंत में, वहाँ किसी भी प्रकार की डिफ़ॉल्ट संदर्भ के लिए रास्ते में एक का निर्माण किया । इस संदर्भ प्रकार के लिए null
दिखाए, लेकिन हमारे दिनांक समय उदाहरण के लिए यह एक ही वापस आ जाएगी DateTime.MinValue
के रूप में:
default(DateTime)
मैं एक nullable types उपयोग करने पर विचार होगा।
DateTime? myDate
DateTime myDate
के बजाय।
आप .NET 2.0 (या बाद में) का उपयोग कर आप नल प्रकार का उपयोग कर सकते हैं कर रहे हैं:
DateTime? dt = null;
या
Nullable<DateTime> dt = null;
बाद में
तो:
dt = new DateTime();
और तुम मूल्य के साथ जांच कर सकते हैं:
if (dt.HasValue)
{
// Do something with dt.Value
}
या आप इसे पसंद का उपयोग कर सकते हैं:
DateTime dt2 = dt ?? DateTime.MinValue;
आप यहाँ और अधिक पढ़ सकते हैं:
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
आप .NET के पुराने संस्करणों में भी शून्य के प्रकारों का उपयोग कर सकते हैं, 3.0 की आवश्यकता नहीं है। – stephenbayer
टाइपो, इसे अद्यतन किया गया। –
यह .NET 2.0 में आया था? द? सिंटैक्स 3.5 में वीबीएनईटी में जोड़ा गया था, लेकिन यह 2.0 के बाद से सी # में रहा है। –
आप एक नल वर्ग का उपयोग कर सकते हैं।
DateTime? date = new DateTime?();
आप इसके लिए एक सुस्त डेटटाइम का उपयोग कर सकते हैं।
Nullable<DateTime> myDateTime;
या एक ही बात इस तरह लिखा:
DateTime? myDateTime;
मैं हमेशा DateTime.MinValue
करने के लिए समय निर्धारित किया है। इस तरह मुझे कोई NullErrorException नहीं मिलता है और मैं इसे उस तारीख से तुलना कर सकता हूं जो मुझे पता है कि सेट नहीं है।
इसका मतलब है कि आप "मुझे वास्तव में डेटटाइम की आवश्यकता है" और "यह वैकल्पिक है" के बीच अंतर नहीं बता सकता - Nullable
? मुझे आपकी टिप्पणी नहीं मिलती है। हाँ मुझे पता है कि डेटटाइम अब तक वास्तविकता का मार्ग है जैसे कि यह शून्य था ... –
मैं बस एक अन्य समाधान का सुझाव दे रहा हूं। दोहराए जाने के बजाय यहां पहले से 10 बार सुझाव दिया गया है। –
आप डेटटाइम को शून्य करने के लिए सेट कर सकते हैं। डिफ़ॉल्ट रूप से डेटटाइम शून्य नहीं है। आप इसे दो तरीकों से कमजोर बना सकते हैं। डेटटाइम के प्रकार के बाद एक प्रश्न चिह्न का उपयोग करना? MyTime या सामान्य शैली Nullable का उपयोग कर। मैंने msdn पर कुछ लिंक जोड़े हैं।
दिनांक समय? MyDateTime {मिल; सेट;}
MyDateTime = (drOrder["Field1"] == DBNull.Value) ? (DateTime?)null : ((DateTime)drOrder["Field1"]);
आप कर रहे हैं, कभी कभी, आप कुछ इस तरह इस्तेमाल कर सकते हैं अशक्त उम्मीद:
var orderResults = Repository.GetOrders(id, (DateTime?)model.DateFrom, (DateTime?)model.DateTo)
अपने भंडार उपयोग अशक्त करने योग्य datetime में।
public Orders[] GetOrders(string id, DateTime? dateFrom, DateTime? dateTo){...}
यह उनका कहना है कि, जबकि एक DateTime
चर null
नहीं किया जा सकता, यह अभी भी null
की तुलना में किया जा सकता है एक संकलक त्रुटि के बिना लायक है:
DateTime date;
...
if(date == null) // <-- will never be 'true'
...
बस चेतावनी दी - एक Nullable का उपयोग करते समय अपनी स्पष्ट रूप से अब 'शुद्ध' डेटाटाइम ऑब्जेक्ट नहीं है, क्योंकि आप डेटटाइम सदस्यों को सीधे एक्सेस नहीं कर सकते हैं। मैं कोशिश करूँगा और समझाऊंगा।
Nullable < का उपयोग करके> आप मूल रूप से एक कंटेनर में डेटटाइम लपेट रहे हैं (धन्यवाद जेनिक्स) जिसमें से यह स्पष्ट है - जाहिर है इसका उद्देश्य। इस कंटेनर की अपनी संपत्तियां हैं जिन्हें आप कॉल कर सकते हैं जो उपर्युक्त डेटटाइम ऑब्जेक्ट तक पहुंच प्रदान करेगा; सही संपत्ति का उपयोग करने के बाद - इस मामले में Nullable.Value - आपके पास मानक डेटटाइम सदस्यों, गुणों आदि तक पहुंच है
तो - अब यह समस्या डेटटाइम ऑब्जेक्ट तक पहुंचने का सबसे अच्छा तरीका है। कुछ तरीके हैं, संख्या 1 एफएआर द्वारा सर्वोत्तम है और 2 "दोस्त क्यों है"।
Nullable.Value संपत्ति का उपयोग करना,
DateTime date = myNullableObject.Value.ToUniversalTime(); //Works
DateTime date = myNullableObject.ToUniversalTime(); //Not a datetime object, fails
datetime को व्यर्थ वस्तु परिवर्तित Convert.ToDateTime() का उपयोग कर,
DateTime date = Convert.ToDateTime(myNullableObject).ToUniversalTime(); //works but why...
हालांकि इस बिंदु पर उत्तर अच्छी तरह से प्रलेखित किया गया है, मेरा मानना है कि न्यूलबल का उपयोग शायद पोस्टिंग के लायक था। क्षमा करें अगर आप असहमत हैं।
संपादित करें: एक तीसरा विकल्प हटा दिया गया क्योंकि यह थोड़ा अधिक विशिष्ट और मामला निर्भर था।
हालांकि हर किसी को पहले से ही आप इस सवाल का जवाब दे दिया है, मैं एक तरह से जो इसे आसान बना देता एक समारोह में एक datetime पारित करने के लिए
[त्रुटि उल्लेख करेंगे: system.datetime परिवर्तित नहीं कर सकते? system.datetime करने के लिए]
DateTime? dt = null;
DateTime dte = Convert.ToDateTime(dt);
अब आप DTE समारोह के अंदर किसी भी मुद्दे के बिना पारित कर सकते हैं।
दिनांक/समय डेटा प्रकार की प्रकृति को देखते हुए इसमें null
मान नहीं हो सकता है, यानी इसे एक मान रखने की आवश्यकता है, यह खाली नहीं हो सकता है या कुछ भी नहीं हो सकता है। यदि आप दिनांक/समय चर को nullable
के रूप में चिह्नित करते हैं तो केवल आप इसे शून्य मान असाइन कर सकते हैं। तो तुम क्या के लिए देख रहे दो चीजों में से एक है (हो सकता है और अधिक है, लेकिन मैं केवल दो के बारे में सोच सकते हैं):
अपने चर के लिए एक न्यूनतम दिनांक/समय मान निर्दिष्ट करें यदि आप एक नहीं है इसके लिए मूल्य। आप अधिकतम दिनांक/समय मूल्य भी निर्दिष्ट कर सकते हैं - जो भी तरीका आपको उपयुक्त बनाता है। बस अपनी तिथि/समय मानों की जांच करते समय सुनिश्चित करें कि आप लगातार साइट-व्यापी हैं।
min
याmax
का उपयोग करने पर निर्णय लें और इसके साथ चिपके रहें।अपनी तिथि/समय परिवर्तक को
nullable
के रूप में चिह्नित करें। यदि आपके पास कोई वैरिएबल नहीं है तो इस तरह आप अपनी दिनांक/समय चर कोnull
पर सेट कर सकते हैं।
मुझे उदाहरण का उपयोग करके अपना पहला बिंदु प्रदर्शित करने दें। DateTime
परिवर्तनीय प्रकार को शून्य पर सेट नहीं किया जा सकता है, इसे एक मान की आवश्यकता है, इस मामले में मैं इसे DateTime
के न्यूनतम मान पर सेट करने जा रहा हूं यदि कोई मूल्य नहीं है।
मेरा परिदृश्य यह है कि मेरे पास BlogPost
कक्षा है। इसमें कई अलग-अलग फ़ील्ड/गुण हैं लेकिन मैंने इस उदाहरण के लिए केवल दो का उपयोग करना चुना है। DatePublished
तब होता है जब पोस्ट वेबसाइट पर प्रकाशित किया गया था और इसमें दिनांक/समय मान होना चाहिए। DateModified
तब होता है जब कोई पोस्ट संशोधित होता है, इसलिए इसमें कोई मान नहीं होना चाहिए, लेकिन इसमें कोई मान हो सकता है।
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
ADO.NET
का उपयोग डेटाबेस से डेटा प्राप्त करने के लिए (असाइन DateTime.MinValue
कोई मूल्य नहीं है):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
आप nullable
रूप DateModified
क्षेत्र चिह्नित करके मेरी दूसरी बात को पूरा कर सकते हैं। अब आप null
के लिए सेट कर सकते हैं अगर इसके लिए कोई मूल्य है:
public DateTime? DateModified { get; set; }
ADO.NET
का उपयोग डेटाबेस से डेटा प्राप्त करने के लिए, यह थोड़ा जिस तरह से यह ऊपर किया गया था करने के लिए भिन्न दिखाई देंगे (बताए बजाय null
DateTime.MinValue
):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? (DateTime?)null : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
मुझे आशा है कि यह किसी भी भ्रम स्पष्ट करने के लिए मदद करता है। यह देखते हुए मेरी प्रतिक्रिया के बारे में 8 साल बाद आप शायद एक विशेषज्ञ सी # प्रोग्रामर अब तक :)
इस तरह के रूप में अच्छी तरह से
myClass.PublishDate = toPublish ? DateTime.Now : (DateTime?)null;
कृपया ध्यान दें कि संपत्ति PublishDate दिनांक समय होना चाहिए काम कर रहे हैं कि?
मैं एक ही समस्या थी के रूप में मैं दिनांक समय के लिए एक पैरामीटर के रूप अशक्त देने के लिए है, जबकि यूनिट परीक्षण प्रदर्शन कर फेंकता के लिए ArgumentNullException.It मेरे मामले में काम किया निम्नलिखित विकल्प का उपयोग करने के लिए किया था:
Assert.Throws<ArgumentNullException>(()=>sut.StartingDate = DateTime.Parse(null));
- 1. डेटटाइम मान
- 2. BitmapFactory.decodeResource शून्य मान
- 3. जब एक शून्य मान
- 4. जबकि शून्य मान
- 5. एक शून्य मान
- 6. डेटटाइम वैकल्पिक पैरामीटर में डिफ़ॉल्ट मान क्या होना चाहिए?
- 7. क्या सच हमेशा शून्य-शून्य मान था?
- 8. GROUP_CONCAT वापस शून्य अगर कोई मान शून्य
- 9. PSQLException: त्रुटि: कॉलम में शून्य मान शून्य-शून्य बाधा
- 10. डेटटाइम
- 11. डेटटाइम
- 12. Xstream शून्य मान को क्रमानुसार
- 13. EasyMock औरReturn() शून्य वापसी मान
- 14. विधि ओवरलोडिंग और शून्य मान
- 15. हाइबरनेट क्वेरी.सूची() विधि शून्य मान
- 16. एंड्रॉइड जेसन और शून्य मान
- 17. शेयरपॉइंट डेटटाइम नियंत्रण: इसे
- 18. डेटटाइम ऑफसेट टू डेटटाइम रूपांतरण - डेटा हानि
- 19. 'डेटटाइम' और 'डेटटाइम ऑफसेट'
- 20. डेटटाइम, डेटटाइम? और LINQ
- 21. सी # डेटटाइम
- 22. शून्य से डेटटाइम से तारीख हो रही है?
- 23. डेटा शून्य है। इस विधि या संपत्ति को शून्य मान
- 24. सी # डेटटाइम
- 25. डेटटाइम
- 26. 'डेटटाइम'
- 27. डेटटाइम स्वरूपण
- 28. डेटटाइम डीबीएनयूएल
- 29. PHP कुंजी/मान रखने के दौरान रिक्त, शून्य ऐरे कुंजी/मान हटाएं अन्यथा खाली/शून्य
- 30. त्रुटि अद्यतन पृष्ठ: \t मान शून्य नहीं हो सकता है (मान दिया गया: शून्य) TAAL [BLAME_file]
यह बहुत अगर आप में मदद मिलेगी इसका उपयोग कैसे करें इसका एक उदाहरण प्रदान करें। डेटाबेस में डेटटाइम को आप कैसे असाइन करते हैं, जो डीबीएनयूएल हो सकता है, जो कि शून्य समय पर हो सकता है? –
यह भी ध्यान रखना अच्छा है कि जब आप उन्हें प्रारंभ करते हैं और शून्य के साथ, उन्हें 'डेटटाइम.माइनवैल्यू' के साथ-साथ – jlafay
@ kirk.burleson असाइन किया जाता है जो एक अलग प्रश्न की तरह दिखता है। – CompuChip