2013-03-21 8 views
5

मैं पाठ की एक बड़ी हिस्सा इस तरह मिल गया है:दिनांक समय में स्ट्रिंग इस तरह की पार्स - "शुक्रवार 22 वें मार्च 2013" (सी #)

.... सलाह देता है जो शुक्रवार 22 वें मार्च 2013 की क्षमता है एक दिन घोषित किया जाएगा .....

मुझे पता लगाना है और फिर उसमें डेटटाइम का विश्लेषण करना है (शुक्रवार 22 मार्च 2013)। मैं इसे ढूंढ सकता हूं और डेटटाइम का उपयोग कर सकता हूं। लगभग सब कुछ पाने के लिए ट्राईपर्स, लेकिन ऑर्डिनल प्रत्यय (सेंट, एनडी, rd, वें) मुझे फेंक रहे हैं।

जब मैं TryParse विधि को कॉल करने से पहले प्रारूप स्ट्रिंग का निर्माण कर रहा हूं, तो क्या ऐसे वाइल्डकार्ड वर्ण हैं जिनका उपयोग मैं उन प्रत्ययों को ध्यान में रख सकता हूं? या कोई अन्य सुझाव?

धन्यवाद!

+1

आप उन्हें प्रत्यय को दूर करने की कोशिश की है string.replace या regex का उपयोग कर? क्या यह एक विकल्प है? –

उत्तर

2

regex का उपयोग कर अवांछित वर्णों को बदलने के बारे में कैसे?

उदाहरण के तौर पर निम्नलिखित रेगेक्स को नौकरी करना चाहिए: "(?<=\d)[a-z]{2}"

उदाहरण कोड

string date = "Friday 22nd March 2013"; 
var r = new Regex(@"(?<=\d)[a-z]{2}"); 
String result = r.Replace(date, ""); 
Console.WriteLine(DateTime.Parse(result, CultureInfo.InvariantCulture)); 

आउटपुट:

22/03/2013 00:00:00 

यह ज्यादातर मामलों का ध्यान रखना चाहिए, लेकिन यह ठीक से परीक्षण करने के लिए सुनिश्चित करें।

+1

और जब आपके पास रविवार है, "nd" को "" के साथ बदल दिया जाएगा और फिर कबूम! –

+0

@ निकोला डेविडोविक क्या आपने मेरा पूरा जवाब पढ़ा? अंतिम भाग फिर से पढ़ें। :) – eandersson

+0

आपके द्वारा सुझाए गए उत्तर गलत हैं लेकिन बाद में सामान्यीकरण अच्छा है। आप रेगेक्स का सुझाव क्यों नहीं देते? –

1

आप हमेशा इसे बलपूर्वक बल दे सकते हैं।

नोट: मैं फ़ूजी के कुछ कोड उधार ले रहा हूं, इसलिए हमारे पास समान दिखने और अनुभव है।

string date = "Friday 22nd March 2013"; 
string[] split = date.Split(' '); 
string dayOfWeek = split[0]; // throw away & don't need 
int day = Convert.ToInt32(split[1].SubString(0, split[1].Length - 2); 
int month = 0; 
switch (split[2]) { 
    case "January": month = 1; break; 
    case "February": month = 2; break; 
    case "March": month = 3; break; 
    case "April": month = 4; break; 
    case "May": month = 5; break; 
    case "June": month = 6; break; 
    case "July": month = 7; break; 
    case "August": month = 8; break; 
    case "September": month = 9; break; 
    case "October": month = 10; break; 
    case "November": month = 11; break; 
    case "December": month = 12; break; 
} 
int year = Convert.ToInt32(split[3]); 
var dateTime = new DateTime(year, month, day); 
Console.WriteLine(dateTime); 

100% मुझे "नया डेटटाइम" कन्स्ट्रक्टर सही नहीं मिला। मेरे पास अभी मेरा आईडीई नहीं चल रहा है।

0

वहाँ an overload of DateTime.Parse that allows multiple format strings है - आप इस सहायक विधि की तरह, शाब्दिक स्ट्रिंग के रूप में ऑर्डिनल्स में पारित कर सकते हैं (कि माह/दिन नाम वर्तनी बाहर काम करने के धागे स्थान का उपयोग करता):

private static DateTime ParseOrdinalDateTime(string dt) 
{ 
    string[] expectedFormats = new[] { 
             "dddd d'st' MMMM yyyy", 
             "dddd d'nd' MMMM yyyy", 
             "dddd d'rd' MMMM yyyy", 
             "dddd d'th' MMMM yyyy" 
             }; 

    return DateTime.ParseExact(dt, expectedFormats, null, DateTimeStyles.None); 
} 
संबंधित मुद्दे