2009-10-14 15 views

Antwort

12

das Erarbeiten zwei Formate, die Sie wollen, dann verwenden:

DateTime dt = DateTime.ParseExact(input, inputFormat, 
            CultureInfo.InvariantCulture); 
string output = dt.ToString(outputFormat, CultureInfo.InvariantCulture); 

Zum Beispiel:

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main(string[] args) 
    { 
     string input = "10/13/2009 12:00:00 AM"; 
     string inputFormat = "MM/dd/yyyy HH:mm:ss tt"; 
     string outputFormat = "yyyyMMdd"; 
     DateTime dt = DateTime.ParseExact(input, inputFormat, 
              CultureInfo.InvariantCulture); 
     string output = dt.ToString(outputFormat, CultureInfo.InvariantCulture); 
     Console.WriteLine(output); 
    } 
} 
+0

toll, danke – raklos

2

Wenn die Zeichenfolge ein gültiges Datetime-Format das ist. Net kann verstehen, alles, was Sie brauchen, ist:

DateTime.Parse(yourString).ToString("yyyyMMdd") 

EDITED: Viele vernünftige Datums-Zeitformate verständlich sind von .NET ohne eine explizite Formatspezifikation, aber wenn Ihr spezifisches nicht der Fall, dann werden Sie brauchen eine explizite Format verwenden Spezifizierer.

DateTime.ParseExact(yourString, format, 
     CultureInfo.InvariantCulture)).ToString("yyyyMMdd") 
+1

"C#" hat keine gültigen Datetime-Formate - .NET hat Standardformate, die DateTime.Parse akzeptieren wird, aber sie hängen von der Kultur des Systems ab. Es ist besser, explizit zu sein, IMO. –

+0

Bearbeitet, um zu korrigieren, aber Jon, nicht explizit zu sein, hat den Vorteil, in der Lage zu sein, alle Formate zu handhaben, die .Net versteht "out of the box", sozusagen ... Abhängig von dem Szenario/Anforderungen, würde ich jedes sagen Technik hat ihren Platz. –

0
string s = String.Format("{0:yyyyMMdd}", Convert.ToDateTime("10/13/2009 12:00:00 AM")); 
+2

Das schlägt auf meiner Box fehl - Sie gehen davon aus, dass Convert.ToDateTime dieses Format verarbeiten wird, was in einer britischen Kultur nicht der Fall ist. –

0

Das sind ziemlich gute Lösungen, aber wenn man etwas in dem passiert das Muster nicht entspricht, werden sie Ausnahmen werfen. Ich benutze gerne die SmartDate-Klasse von CSLA, http://www.lhotka.net/cslanet/download.aspx, selbst. Es behandelt Nullen und ungültige Werte gut. Die TryStringToDate Funktion ist, wo die Magie passiert:

private static bool TryStringToDate(string value, EmptyValue emptyValue, ref DateTime result) 
    { 
     DateTime tmp; 
     if(String.IsNullOrEmpty(value)) 
     { 
      if(emptyValue == EmptyValue.MinDate) 
      { 
       result = DateTime.MinValue; 
       return true; 
      } 
      result = DateTime.MaxValue; 
      return true; 
     } 
     if(DateTime.TryParse(value, out tmp)) 
     { 
      result = tmp; 
      return true; 
     } 
     string ldate = value.Trim().ToLower(); 
     if(ldate == "SmartDateT" || 
      ldate == "SmartDateToday" || 
      ldate == ".") 
     { 
      result = DateTime.Now; 
      return true; 
     } 
     if(ldate == "SmartDateY" || 
      ldate == "SmartDateYesterday" || 
      ldate == "-") 
     { 
      result = DateTime.Now.AddDays(-1); 
      return true; 
     } 
     if(ldate == "SmartDateTom" || 
      ldate == "SmartDateTomorrow" || 
      ldate == "+") 
     { 
      result = DateTime.Now.AddDays(1); 
      return true; 
     } 
     return false; 
    } 

So schließlich mit so etwas wie diese aufzuwickeln sollten Sie:

 SmartDate dt = new SmartDate(input); 
     dt.FormatString = outputFormat; 
     string output = dt.Text; 
     Console.WriteLine(output); 
0

Sie so etwas wie dies versuchen könnte:

string myDate = "10/13/2009 12:00:00 AM"; 
DateTime result = new DateTime(DateTime.Now.Year, 1, 1); 
DateTime.TryParse(myDate, out result); 
string output = result.ToString("yyyyMMdd"); 
Verwandte Themen