2017-03-29 15 views
0

Momentan gibt meine Funktion Datum als 6/6/2016 aus und ich muss in der Lage sein, es als 06/06/2016 für alle Daten zu machen. Ich fand DateTime.Now.ToString ("dd") ist eine Lösung. Aber wenn ich Teile [0] .DateTime.Now.ToString ("dd") mache, akzeptiert es es nicht.C# DateTime-Format in Arrays

private static string FormatDate(string sDate) 
{ 
    // "6/16/1989" 
    //mysql format 06-16-1989 

    string[] parts = sDate.Split('/'); 

    //sDay.DateTime.Now.ToString("dd"); 

    return $"'{parts[2]}-{parts[1]}-{parts[0]}'"; 
} 
+2

Teile ist kein Datetime-Objekt. Sie möchten 'DateTime.ParseExact (sDate," MM/TT/JJJJ ", System.Globalization.CultureInfo.CurrentCulture);' um das Datum als C# Datetime-Objekt zu erhalten. Wenn Sie MySQL verwenden, sollten Sie den .NET-MySQL-Treiber und [parametrisierte Abfragen] (http://stackoverflow.com/questions/652978/parameterized-query-for-mysql-with-c-sharp) verwenden (um dies zu verhindern) SQL-Injektion). Ich bin nicht sicher, warum Sie mit Daten in einem Klartextformat umgehen müssen. – john

+0

Ich habe eine Antwort mit einem korrekten ParseExact-Beispiel hinzugefügt. – john

Antwort

-1

Erstens können Sie die Zeichenfolge in ein Datetime über analysieren:

var dt = DateTime.Parse(sDate); 

Dann könnten Sie die DateTime.ToString Formatierungsmethoden verwenden, zB:

dt.ToString("MM-dd-yyyy"); 

Alternativ:

return dt.ToString("MM") + "-" + dt.ToString("dd") + "-" dt.ToString("yy"); 
+0

Sie müssen ParseExact verwenden, da das Datum in einem bestimmten Format ist. Betrachten Sie das britische Format TT/MM/JJJJ. Ist es der dritte Januar oder der erste März? – john

+0

Danke. Ja, ich muss das Jahr zuerst bekommen, deshalb habe ich sie als Teile gemacht. Und das hat nicht funktioniert :( – kyreSong

0

Ich denke, was Sie suchen ich dies s:

string sDate = "6/16/1989"; 
Console.WriteLine(Convert.ToDateTime(sDate).ToString("MM-dd-yyyy")); 

Ausgabe ist dies:

06-16-1989 

Hoffe, es hilft!

0

Versuchen Sie, diese

private static string FormatDate(string sDate) 
{ 
    // "6/16/1989" 
    //mysql format 06-16-1989 
    DateTime date; 
    if (!DateTime.TryParseExact(sDate, new string[] { "MM/dd/yyyy", "M/dd/yyyy", "MM/d/yyyy" }, System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.AdjustToUniversal, out date)) 
    { 
     return string.Empty; 
    } 
    return date.ToString("MM-dd-yyyy"); 
} 

Dies würde auch funktionieren, wenn Sie nur einen Standard TryParse verwenden wollte:

private static string FormatDate(string sDate) 
{ 
    // "6/16/1989" 
    //mysql format 06-16-1989 
    var usCultureInfo = System.Globalization.CultureInfo.GetCultureInfo(0x0409); 
    DateTime date; 
    if (!DateTime.TryParse(sDate, usCultureInfo, System.Globalization.DateTimeStyles.AdjustToUniversal, out date)) 
    { 
     return string.Empty; 
    } 
    return date.ToString("MM-dd-yyyy"); 
} 

Beachten Sie, dass diese Beispiele einen leeren String zurück, wenn das Datum nicht verstanden .

Aber denken Sie daran, den MySQL-Treiber und parametrisierte Abfragen zu verwenden, da dies Ihren Code sicherer macht und einfacher zu handhaben ist.

+0

Es ist nicht irgendwie nicht funktioniert. Also habe ich diese Lösung und es funktionierte – kyreSong

+0

private static String Format (string sDate) \t \t { \t \t \t // „1989.06.16“ \t \t \t // mysql Format yyyy-mm-dd => 1989-06-16 \t \t \t string [] Teile = sDate.Teilt('/'); \t \t \t Saite mm = Teile [1]; \t \t \t if (mm.Length <2) \t {Teile [1] = "0" + mm; } \t \t \t Zeichenfolge dd = Teile [0]; \t \t \t if (dd.Length <2) {Teile [0] = "0" + dd; } \t \t \t zurück $ "'{parts [2]} - {parts [0]} - {parts [1]}'"; \t \t} – kyreSong

0

Sie können DateTime.ParseExact() verwenden, das Ihnen sagt, wenn der übergebene Wert nicht das richtige Format hat, indem eine Ausnahme ausgelöst wird. Ein Beispiel wäre

string sDate = "6/6/2016"; 

     try 
     { 
      DateTime dt = DateTime.ParseExact(sDate, "d/M/yyyy", CultureInfo.InvariantCulture); 

      Console.WriteLine(dt.ToString("yyyy-MM-dd")); 
     } 
     catch (Exception e) { 

      Console.WriteLine(e.Message); 
     }