2014-11-12 11 views
6

मैं एडीओ कट मोड का उपयोग डाटासेट डी एस सभी डेटा भरकर datatbase से डेटा प्राप्त करने दायरasp.net अरबी datetime त्रुटि

string strDate = ds.Tables[0].Rows[0]["H_DT"].ToString(); 

यह एक अपवाद फेंकता तारीख को छोड़कर सच कहते हैं:

निर्दिष्ट कैलेंडर इस कैलेंडर में समर्थित नहीं है। यह 04/30/1900 00:00:00 (ग्रेगोरियन दिनांक) और 11/16/2077 23:59:59 (ग्रेगोरियन दिनांक), समावेशी के बीच होना चाहिए।

मैं अरबी, लेकिन किसी भी भाग्य के बिना संस्कृति को बदलने के लिए इस कोड को

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-sa"); 
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("ar-sa"); 

लिखने का प्रयास किया, किसी को भी मेरी मदद कर सकते कृपया

अद्यतन:

पीछा कर रहा है परिवर्तनीय

01 के लिए त्वरित घड़ी का स्क्रीनशॉट

+2

'ds.Tables का मूल्य [0 क्या है ] पंक्तियाँ [0] ["एचडीटी"] 'बिल्कुल? अपना कोड डीबग करें और हमें बताएं। –

+0

सोनेर, मैं स्क्रीनशॉट –

+0

exapnd तारीख नोड भी अपनी स्क्रीन गोली मार दी –

उत्तर

7

DateTime.ToString method

ToString() विधि से वर्तमान संस्कृति द्वारा प्रयोग किया जाता कैलेंडर में तिथि और समय की स्ट्रिंग प्रतिनिधित्व देता है। यदि वर्तमान DateTime उदाहरण के मूल्य में पहले की तुलना में Calendar.MinSupportedDateTime या Calendar.MaxSupportedDateTime बाद में की तुलना में है, विधि एक ArgumentOutOfRangeException फेंकता है।

आपकी ar-sa संस्कृति का डिफ़ॉल्ट कैलेंडर UmAlQuraCalendar calender है।

var culture = CultureInfo.GetCultureInfo("ar-sa"); 
Console.WriteLine(culture.Calendar); // prints UmAlQuraCalendar 

और UmAlQuraCalendar.MinSupportedDateTime Property

जल्द से जल्द दिनांक और समय UmAlQuraCalendar वर्ग, जो ग्रेगोरियन कैलेंडर में अप्रैल 30, 1900 सी.ई. के पहले पल के बराबर है द्वारा समर्थित से।

अपने DateTime के बाद से 1, 1, 1398 है, यह भी फेंकता ArgumentOutOfRangeException सामान्य है।

आप विधि में IFormatProvider पैरामीटर प्रदान करने के लिए अपनी समस्या का समाधान कर सकते हैं जिसमें डिफ़ॉल्ट रूप से GregorianCalendar है। उदाहरण के लिए आप InvariantCulture का उपयोग कर सकते हैं।

string strDate = ds.Tables[0].Rows[0]["H_DT"].ToString(CultureInfo.InvariantCulture); 

मैं सभी आवेदन में वैश्विक होने की ar-sa के रूप में वेब config में भूमंडलीकरण विन्यास लिखा था, लेकिन मैं एक ही त्रुटि का सामना करना पड़ा, तो कृपया स्पष्ट मुझे, धन्यवाद

एक DateTime ग्रेगोरियन कैलेंडर पर अंतर्गत आता है डिफ़ॉल्ट रूप से DateTime structure से;

प्रत्येक DateTime सदस्य परोक्ष कंस्ट्रक्टर्स के अपवाद है कि एक कैलेंडर निर्दिष्ट के साथ, अपनी कार्रवाई करने के लिए ग्रेगोरियन कैलेंडर का उपयोग करता है, और एक पैरामीटर, ऐसे System.Globalization.DateTimeFormatInfo रूप IFormatProvider से प्राप्त के साथ तरीकों, कि परोक्ष एक निर्दिष्ट करता है कैलेंडर।

इसका मतलब है कि आपके ds.Tables[0].Rows[0]["H_DT"] डेटाटाइम डिफ़ॉल्ट रूप से ग्रेगोरियन कैलेंडर है। लेकिन चूंकि आप बिना किसी पैरामीटर के .ToString() विधि का उपयोग करते हैं, इसलिए आपकी विधि आपके CurrentCulture का उपयोग करती है जो ar-sa है क्योंकि आपने इसे अपने web.config में लिखा था। और उस संस्कृति में डिफ़ॉल्ट रूप से UmAlQuraCalendar कैलेंडर है। चूंकि इस कैलेंडर में आपकी डेटाटाइम सीमा से बाहर है, इसलिए आपका कोड अपवाद फेंकता है।

याद रखें, आप UmAlQuraCalendar कैलेंडर में एक वर्ष के रूप में 1318 ग्रेगोरियन कैलेंडर में एक वर्ष के रूप में के साथ एक DateTime है, नहीं1318

उदाहरण के रूप में;

var date = new DateTime(1318, 1, 1); 
Console.WriteLine(date.ToString(new CultureInfo("ar-sa"))); 

ArgumentOutOfRangeException अपवाद फेंकता है, क्योंकि यह वास्तव में तुम्हारा का एक ही मामला है। यह एक डेटटाइम है जो ग्रेगोरियन कैलेंडर में 1318 वर्ष है, लेकिन इस डेटाटाइम के UmAlQuraCalendar कैलेंडर पर कोई प्रतिनिधित्व नहीं है क्योंकि UmAlQuraCalendar कैलेंडर में, ग्रेगोरियन कैलेंडर में 1900 के साथ वर्ष शुरू होते हैं।

UmAlQuraCalendar calender implemented पर एक नज़र डालें;

//////////////////////////////////////////////////////////////////////////// 
// 
// Notes about UmAlQuraCalendar 
// 
//////////////////////////////////////////////////////////////////////////// 
/* 
** Calendar support range: 
**  Calendar Minimum  Maximum 
**  ========== ========== ========== 
**  Gregorian 1900/04/30 2077/11/17 
**  UmAlQura 1318/01/01 1500/12/30 
*/ 
+0

बहुत बहुत धन्यवाद सोनेर के साथ मेरे सवाल संपादित, यह आपके महान समाधान द्वारा हल किया गया है, कृपया मुझे कुछ समझने की जरूरत है कि आपने कहा "toString() विधि वर्तमान संस्कृति द्वारा उपयोग किए गए कैलेंडर में दिनांक और समय का स्ट्रिंग प्रतिनिधित्व देता है। यदि वर्तमान दिनांक समय का मान कैलेंडर से पहले है। MinSupportedDateTime या कैलेंडर के बाद .MaxSupportedDateTime, विधि एक ArgumentOutOfRangeException फेंकता है " मैंने लिखा सभी कॉन्फ़िगरेशन में वैश्विक होने के लिए वेब कॉन्फ़िगरेशन में वैश्वीकरण कॉन्फ़िगरेशन, लेकिन मुझे एक ही त्रुटि का सामना करना पड़ा, कृपया मुझे स्पष्टीकरण दें, धन्यवाद –

+0

और इस भाग के लिए "UmAlQuraCalendar क्लास द्वारा समर्थित सबसे पुरानी तिथि और समय, जो ग्रेगोरियन कैलेंडर में 30 अप्रैल, 1 9 00 सीई के पहले पल के बराबर है। चूंकि आपका डेटटाइम 1, 1, 13 9 8 है, इसलिए ArgumentOutOfRangeException को फेंकना बहुत सामान्य है " दिनांक 1/1/1398 यह केवल 38 साल पहले 1 9 00 ग्रेगोरियन के बाद कई वर्षों से –

+0

@AbrahamJosef ने अधिक स्पष्टीकरण के साथ अपना उत्तर अपडेट किया। जरा देखो तो। –

0

इस प्रयास करें:

var ci = CultureInfo.CreateSpecificCulture("ar-SA"); 
string strDate = ds.Tables[0].Rows[0]["H_DT"].ToString(ci); 

आप आप इच्छित संस्कृति पारित करेंगे जब आप स्ट्रिंग के लिए तिथि परिवर्तित कर रहे हैं।

0

---> इस मुद्दे

सी # में datetime वस्तु में हिजरी की तारीख का कारण 1318/01/01 और 30/12/1500 के बीच है।

ग्रेगोरी तिथि में

वर्ष 1900 और 2077

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

2 हिजरी तारीख को बीच में नहीं है सुनिश्चित करें कि आप


----> समाधान

०१२३५१६४१० ऑनलाइन किसी भी कनवर्टर साइट खोलने के द्वारा रूपांतरित कर सकते हैं

आप इस मुद्दे

-solusion 1

आप एसक्यूएल में तिथि के मूल्यों को अपडेट कर सकते

वास्तविक तारीख के लिए सेट को हल करने 2 समाधान है (1900 और 2077 के बीच)

या

-solution 2

अपने कोड में इससे पहले कि आप datatable पंक्ति से तारीख मिल आप CurrentCulture स्थापित करने के लिए करना चाहिए करने के लिए "एन" और जब आप कोड को समाप्त कर आप भाषा सेट करना चाहिए करने के लिए "ar" ।

जांच नीचे

bool isLanguageChanged = false; 
if (Thread.CurrentThread.CurrentCulture.Name == "ar") 
{ 
    isLanguageChanged = true; 

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en"); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("en"); 
} 

string dateStr = dataTable.Rows[i]["DateColumn"].ToString(); 

if (isLanguageChanged) 
{ 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("ar"); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("ar"); 
} 
0

उपयोग InvariantCulture जब सीमित संस्कृतियों के तहत तार करने के लिए दिनांक परिवर्तित करने के लिए, बस इस तरह कोड:

using System.Globalization; 
string str = someDate.ToString(CultureInfo.InvariantCulture);