2012-05-12 15 views
6

Ich habe ein Datum wie 12.05.2012 jetzt möchte ich dieses Format in einfache Zeichenfolge ändern.Wie konvertiert man das Datum in ein Word-Format?

für ex.

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

jetzt meine BDate ist DateTime dh. BDate= 2012/05/12

jetzt möchte ich etwas wie

tun, wenn mein Bdate ist 12.05.2012 so dass ich eine Zeichenfolge wollen, die wie ähnlich ist „Zwölf Mai 2012“

Wie kann ich tun Dies?

Bitte helfen Sie mir ...

Vielen Dank im Voraus ....

+0

Darf ich fragen, warum Sie dies tun möchten? Es ist ein ziemlich ungewöhnliches Datumsformat (und sollte es nicht "Kann der Zwölfte, Zweitausend Zwölf" sein?). –

+3

@ FrédéricHamidi: Nur in den USA. Im Rest der Welt sprechen wir es als "Zwölfter Mai" aus. Dies ist der Grund, warum die gesamte "MM/dd" vs "dd/MM" Disparität zugrunde liegt. – Douglas

+0

@ Douglas, ah, ich verstehe. Vielen Dank für Ihre Klarstellung :) –

Antwort

9

Sie müssen jeden Datumsteil betrachten und eine Funktion verwenden, um die geschriebene Entsprechung zu erhalten. Ich habe eine Klasse unterhalb konvertiert Zahlen in geschriebenen Text enthalten, und es erweitert DateTime Umwandlung als auch zu unterstützen:

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); 
    } 
} 

Haftungsausschluss: Basisfunktionalität mit freundlicher Genehmigung von @Wedge

Rufen Sie mit dieser Klasse einfach die DateToWritten-Methode auf:

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

Die Ausgabe der oben genannten ist: Twelve May Two Thousand Twelve

+0

Vielen Dank für Ihre große Hilfe .. :) –

1

Das ist nicht das, was Sie wollen, aber in der Nähe kann ich vorschlagen, eine integrierte Funktionalität verwendet, ist ToLongDateString, die Sie gibt der Name des Monats und ist offensichtlich kultursensibel.

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

Ich brauche das nicht. Ich will Zwölf Mai Zwei Tausend Zwölf –

1

Angenommen 12.05.2012 ist ein String, dann sind Sie auf tokenize es in Elemente aufweisen, die durch einen Schrägstrich „/“ getrennt. ZB:

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

Als nächstes definieren Sie selbst eine Regel, die zu dem, was Sie diese Elemente parsen erwarten von. Sagen Sie, "12" ist "zwölf", "05" ist "fünf" oder "Mai" usw.

+0

Ich denke, sie in geschriebene Zahlen konvertieren ist, was OP hat Probleme mit ... –

Verwandte Themen