2012-05-12 15 views
6

मेरे पास 12/05/2012 की तरह एक तिथि है, अब मैं उस प्रारूप को सरल स्ट्रिंग में बदलना चाहता हूं।तारीख को शब्द प्रारूप में कैसे परिवर्तित करें?

पूर्व के लिए।

string newdate = new string(); 
newdate = "12/05/2012"; 
DateTime Bdate = DateTime.ParseExact(Newdate, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture); 

अब मेरे BDate DateTime यानी है। BDate= 2012/05/12

अब मैं

की तरह कुछ करना चाहता हूँ अगर मेरे Bdate 2012/12/05 तो मैं एक स्ट्रिंग जो की तरह समान है चाहता हूँ "बारह मई दो हजार बारह"

मैं कैसे कर सकते इस?

कृपया मुझे पहले से मदद ...

धन्यवाद ....

+0

मई मैं पूछ सकता हूं कि आप ऐसा क्यों करना चाहते हैं? यह काफी असामान्य तारीख प्रारूप है (और यह 'बारहवीं, दो हजार बारह' नहीं होना चाहिए?)। –

+3

@ फ्रेडेरिक हामिदी: केवल यूएस में। बाकी दुनिया में, हम इसे "बारहवीं मई" के रूप में उच्चारण करते हैं। यही कारण है कि पूरे 'एमएम/डीडी' बनाम 'डीडी/एमएम' असमानता अंतर्निहित है। – Douglas

+0

@ डगलस, आह, मैं समझता हूं। आपकी स्पष्टीकरण के लिए धन्यवाद :) –

उत्तर

9

आपको प्रत्येक दिनांक भाग को देखने और लिखित समकक्ष प्राप्त करने के लिए फ़ंक्शन का उपयोग करने की आवश्यकता होगी। मैंने सम्मिलित कर दिया है कि नीचे एक वर्ग लिखित पाठ के लिए पूर्णांकों में कनवर्ट करता है, और साथ ही DateTime रूपांतरण का समर्थन करने के लिए बढ़ाया:

public static class WrittenNumerics 
{ 
    static readonly string[] ones = new string[] { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" }; 
    static readonly string[] teens = new string[] { "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" }; 
    static readonly string[] tens = new string[] { "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" }; 
    static readonly string[] thousandsGroups = { "", " Thousand", " Million", " Billion" }; 

    private static string FriendlyInteger(int n, string leftDigits, int thousands) 
    { 
     if (n == 0) 
      return leftDigits; 

     string friendlyInt = leftDigits; 
     if (friendlyInt.Length > 0) 
      friendlyInt += " "; 

     if (n < 10) 
      friendlyInt += ones[n]; 
     else if (n < 20) 
      friendlyInt += teens[n - 10]; 
     else if (n < 100) 
      friendlyInt += FriendlyInteger(n % 10, tens[n/10 - 2], 0); 
     else if (n < 1000) 
      friendlyInt += FriendlyInteger(n % 100, (ones[n/100] + " Hundred"), 0); 
     else 
      friendlyInt += FriendlyInteger(n % 1000, FriendlyInteger(n/1000, "", thousands + 1), 0); 

     return friendlyInt + thousandsGroups[thousands]; 
    } 

    public static string DateToWritten(DateTime date) 
    { 
     return string.Format("{0} {1} {2}", IntegerToWritten(date.Day), date.ToString("MMMM"), IntegerToWritten(date.Year)); 
    } 

    public static string IntegerToWritten(int n) 
    { 
     if (n == 0) 
      return "Zero"; 
     else if (n < 0) 
      return "Negative " + IntegerToWritten(-n); 

     return FriendlyInteger(n, "", 0); 
    } 
} 

अस्वीकरण: मूलभूत कार्यक्षमता शिष्टाचार के @Wedge

इस वर्ग का उपयोग करके, बस डेट टू लिखित विधि को कॉल करें:

var output = WrittenNumerics.DateToWritten(DateTime.Today); 

उपरोक्त का आउटपुट है: Twelve May Two Thousand Twelve

+0

आपकी महान मदद के लिए धन्यवाद .. :) –

1

यह आप क्या चाहते हैं, लेकिन सबसे करीब मैं का उपयोग कर निर्मित कार्यक्षमता ToLongDateString है सुझाव दे सकते हैं, जो आपको देता नहीं है महीने का नाम और स्पष्ट रूप से संस्कृति-संवेदनशील है।

string str = bdate.ToLongDateString(); 
// Assuming en-US culture, this would give: "Saturday, May 12, 2012" 
+0

मुझे इस तरह की आवश्यकता नहीं है। मैं बारह मई दो हजार बारह –

1

मान लीजिए 2012/12/05 एक स्ट्रिंग है, तो आप यह तत्व है जो स्लैश द्वारा "/" अलग में tokenize किया है। उदाहरण के लिए:

"2012/12/05" -> [ "12", "05", "2012"]

इसके बाद, आप अपने आप को एक नियम है जो आप क्या करने के लिए इन तत्वों को पार्स करता है परिभाषित उम्मीद करते हैं। कहें, "12" "बारह" है, "05" "पांच" या "मई" है, आदि

+0

चाहता हूं मुझे लगता है कि उन्हें लिखित संख्याओं में परिवर्तित करना क्या है ओपी को परेशानी हो रही है ... –

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

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