2010-09-03 11 views
21

Ich möchte die DateTime für MySQL in C# ändern.Convert DateTime für MySQL mit C#

Meine MySQL-Datenbank akzeptiert nur dieses Format 1976-04-09 22:10:00.

In C# habe eine Zeichenfolge, die einen Datumswert haben:

string str = "12-Apr-1976 22:10"; 

ich für MySQL konvertieren möchten dann, wie es aussehen:

1976-04-12 22:10 

Wie ich sie oder, wie andere Programmierer tun ändern dies mit dd mm hh yy Methode? Kann mir jemand von ihnen erzählen?

Antwort

53

Beachten Sie, dass Sie kann hart Code ISO-Format

string formatForMySql = dateValue.ToString("yyyy-MM-dd HH:mm:ss"); 

oder benutzen nächste:

// just to shorten the code 
var isoDateTimeFormat = CultureInfo.InvariantCulture.DateTimeFormat; 

// "1976-04-12T22:10:00" 
dateValue.ToString(isoDateTimeFormat.SortableDateTimePattern); 

// "1976-04-12 22:10:00Z"  
dateValue.ToString(isoDateTimeFormat.UniversalSortableDateTimePattern) 

und so weiter

+1

hh: mm ist 12-Stunden-Format, Sie benötigen HH: mm. Ich habe gerade meinen Code mit diesem Abschnitt aktualisiert –

+0

Große Antwort! Kleiner Syntaxfehler: DataTimeFormat sollte DateTimeFormat sein. –

+0

@DerekW: Danke! Fest.Cool :) – abatishchev

13

Wenn Ihr String-Format für die Datetime festgelegt ist Sie in die System.DateTime konvertieren kann mit:

string myDate = "12-Apr-1976 22:10"; 
DateTime dateValue = DateTime.Parse(myDate); 

Nun, wenn Sie es in Ihrem speziellen Format benötigen, können Sie dann den umzukehren, das heißt:

string formatForMySql = dateValue.ToString("yyyy-MM-dd HH:mm"); 

bearbeiten - aktualisierten Code. Aus irgendeinem seltsamen Grund spielte DateTime.ParseExact nicht nett.

+0

BTW, funktioniert Ihr Code nicht out of the Box, ich weiß nicht w warum. Aber nur "DateTime.Parse" funktioniert einwandfrei – abatishchev

5

Ich möchte Sie parametrisierte Abfragen verwenden, anstatt stark vorschlagen Senden von Werten als Zeichenfolgen an erster Stelle.

Auf diese Weise müssen Sie nur in der Lage sein, Ihr Eingabeformat in DateTime oder DateTimeOffset zu konvertieren, und dann müssen Sie sich keine Gedanken über das Datenbankformat machen. Dies ist nicht nur einfacher, sondern vermeidet SQL-Injection-Angriffe (z. B. für Zeichenfolgenwerte) und ist robuster gegenüber Änderungen der Datenbankeinstellungen.

Für die ursprüngliche Umwandlung in DateTime empfehle ich, dass Sie DateTime.ParseExact oder DateTime.TryParseExact verwenden, um das erwartete Format explizit anzugeben.

+2

Mit meiner Erfahrung mit MySQL, wahrscheinlich wegen der Kollatierungseinstellungen, akzeptiert es nicht immer 'System.DateTime' und der beste Weg, um korrekte Arbeit auf jedem Server zu garantieren, ist das explizite Konvertieren von Datum in String im Format' JJJJ-MM-TT ..' – abatishchev

0

Dies funktioniert für mich:

1.Extract Datum von der Basis Oracle-Daten und

string lDat_otp = ""; 

    if (rw_mat["dat_otp"].ToString().Length <= 0) 
    { 
     lDat_otp = ""; 
    } 
    else 
    { 
     lDat_otp = rw_mat["dat_otp"].ToString(); 
    } 

2.Conversion zu mysql-Format es Variable übergeben

DateTime dateValue = DateTime.Parse(lDat_otp); 
string formatForMySql = dateValue.ToString("yyyy-MM-dd HH:mm"); 

3.PASS formatForMySql Variable zu Prozedur oder zu etwas anderes