2011-03-16 9 views
7

मुझे तारों को डेटटाइम ऑब्जेक्ट्स में परिवर्तित करने की आवश्यकता है जो गैर-अंग्रेजी भाषाओं में हैं। मैंने डेटटाइम को अन्य भाषाओं में तारों में परिवर्तित करने के कई उदाहरण देखे हैं, लेकिन दूसरी तरफ नहीं।मैं अरबी जैसी गैर-अंग्रेजी भाषाओं के लिए डेटटाइम.TryParse() का उपयोग कैसे करूं?

यह काम करने के लिए प्रतीत नहीं होता:

CultureInfo provider = new CultureInfo("ar-AE"); // Arabic - United Arab Emirates 

string sample = "الاربعاء 16 مارس 2011"; // Arabic date in Gregorian calendar 
DateTime result; 
DateTime expected = new DateTime(2011, 3, 16); // the expected date 
bool b; 

b = DateTime.TryParse(sample, provider, DateTimeStyles.None, out result); 

Assert.IsTrue(b); 
Assert.AreEqual(expected, result); 

साथ ही, मैं तार कि अन्य कैलेंडर में हैं संभाल करने की जरूरत है। यही मैंने कोशिश की है और यह या तो काम नहीं कर रहा है।

CultureInfo provider = new CultureInfo("ar-AE"); // Arabic - United Arab Emirates 
provider.DateTimeFormat.Calendar = new System.Globalization.HijriCalendar(); 
// Wednesday, March 16, 2011, 11 Rabi second in 1432 
string sample = " ‏11 ربيع ثاني 1432 "; 
DateTime result; 
DateTime expected = new DateTime(2011, 3, 16); // ? 
bool b; 

b = DateTime.TryParse(sample, provider, DateTimeStyles.None, out result); 

Assert.IsTrue(b); 
Assert.AreEqual(expected, result); 

मुझे क्या याद आ रही है?

+0

मुझे लगता है कि अरबी यूनिकोड सामान्य (या कुछ इसी तरह) के साथ एक छोटी सी समस्या है ... मुझे लगता है कि शब्द "बुधवार" दो तरह से लिखा जा सकता है ... आप expected.ToString प्रयास करते हैं ("ddd MMMM yyyy dd ", प्रदाता) आप देखेंगे कि स्ट्रिंग एक जैसी दिखती है, लेकिन बाइनरी-बराबर नहीं है। आपका दूसरा अक्षर 0x0627 (अरबी लिटर एएलईएफ) है, टूस्ट्रिंग एक 0x0623 है (अंबैक लिफ्ट एलेफ़ हम्ज़ा के साथ)। मैं अरब के कुछ भी नहीं जानता, लेकिन मुझे उम्मीद है कि यह आपकी मदद करेगा। – xanatos

उत्तर

2

आप सटीक प्रारूप जानते हैं, तो आप TryParseExact साथ इसके उपयोग के लिए मजबूर कर सकते हैं:

b = DateTime.TryParseExact(sample, "dddd d MMMM yyyy", provider, DateTimeStyles.None, out result); 

हालांकि, आपके मामले में, यह नहीं है काम। जो (आप शायद पढ़ सकते हैं कि मुझे तुलना में बेहतर) एक चरित्र में अपने इनपुट से अलग है

Console.WriteLine(expected.ToString("dddd d MMMM yyyy", provider)); 

और परिणाम "الأربعاء 16 مارس 2011" है,: समस्या जानने के लिए, के विपरीत की कोशिश करते हैं:। नेट उपयोग (और उम्मीद करता है) हम्ज़ा, आपके इनपुट में यह नहीं है। हम इस तरह से इनपुट संशोधित करते हैं, सब कुछ काम करता है:

CultureInfo provider = new CultureInfo("ar-AE"); // Arabic - United Arab Emirates 

string sample = "الأربعاء 16 مارس 2011"; // Arabic date in Gregorian calendar 
DateTime result; 
DateTime expected = new DateTime(2011, 3, 16); // the expected date 
bool b; 

b = DateTime.TryParse(sample, provider, DateTimeStyles.None, out result); 

Assert.IsTrue(b); 
Assert.AreEqual(expected, result); 
+0

मैं अरबी को भी नहीं पढ़ता, और यह पता चला है कि शब्द सप्ताह और महीने के दिन हैं, आदि। एक बार जब मैंने प्रारूप स्ट्रिंग निर्दिष्ट की है तो यह बेहतर काम करता है। धन्यवाद! –

1
DateTime result = DateTime.Parse("الاربعاء 16 مارس 2011", new CultureInfo("ar-JO")); 

लेकिन आप प्रलेखन देख सकते हैं: CultureInfo Class

+0

यह मेरी मशीन पर काम नहीं करता, भले ही हम जॉर्डन चले गए? –

+0

बस आपके उदाहरण की कोशिश की और इसे प्राप्त किया: "स्ट्रिंग को वैध दिनांक समय के रूप में पहचाना नहीं गया था। इंडेक्स 0 से शुरू होने वाला एक अज्ञात शब्द है।" मैं सचमुच आपके उदाहरण की प्रतिलिपि/चिपकाया। क्या देता है? –

+0

क्या आप जानते हैं कि आप किस भाषा का उपयोग करेंगे? – malinois

0

शायद कुछ इस तरह:

int Year, DayOfMonth; 
string Month; 
string[] Months = new string[] {"ينایر","فبرایر","مارس","ابریل","مایو",...};//these texts are writen with persian keyboard,change the ی with ي ,its really hard with my keymap 
string[] Splits = Input.Split(" "); 
foreach(string Split in Splits) 
{ 
    if(Months.Contains(Split)) 
    { 
     Month = Months.IndexOf(Split); 
    } 
    else 
    { 
     int Number; 
     if(int.TryParse(Split, out Number)) 
     { 
      if(Number<32) 
      { 
       DayOfMonth=Number; 
      } 
      else 
      { 
       Year=Number; 
      } 
     } 
    } 
} 

अपने एकाधिक कैलेंडर का समर्थन करने के लिए जा रहा है, तो:
आप के सभी कैलेंडर महीने जोड़ना चाहिए उस सरणी में।
दिसंबर के बाद अगले कैलेंडर महीने (रबी-ओएल-avval, रबी-ओएल-थानी, ...)
तो

पूर्णांक CalendarId = महीना/12 होना चाहिए;
महीना% = 12;

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