2010-09-03 14 views
21

Voglio cambiare DateTime per MySQL in C#.Converti DateTime per MySQL usando C#

Il mio database MySQL accetta solo questo formato 1976-04-09 22:10:00.

In C# hanno una stringa che hanno un valore di data:

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

voglio convertire per MySQL allora apparire come:

1976-04-12 22:10 

Come li posso cambiare o come gli altri programmatori fare questo usando il metodo dd mm hh yy? Qualcuno può parlarmi di loro?

risposta

53

Tenete a mente che si può codificare in formato ISO

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

o utilizzare successivo:

// 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) 

e così via

+1

hh: mm è il formato 12 ore, avrete bisogno di HH: mm. Ho appena aggiornato il mio codice con quella sezione –

+0

Ottima risposta! Piccolo errore sintattico: DataTimeFormat dovrebbe essere DateTimeFormat. –

+0

@DerekW: Grazie! Fisso.Cool :) – abatishchev

13

Se il formato stringa per il DateTime è fisso è possibile convertire il System.DateTime utilizzando:

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

Ora, quando ne avete bisogno nel vostro formato specifico, è possibile invertire il processo, vale a dire:

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

modifica - codice aggiornato. Per qualche strana ragione, DateTime.ParseExact non stava giocando bene.

+0

btw, il tuo codice non funziona fuori dalla scatola, non so Perché? Tuttavia, solo "DateTime.Parse" funziona correttamente – abatishchev

5

Vorrei suggerire di utilizzare query con parametri, invece di inviare i valori come stringhe in primo luogo.

In questo modo è sufficiente essere in grado di convertire il formato di input in DateTime o DateTimeOffset e quindi non è necessario preoccuparsi del formato del database. Questo non è solo più semplice, ma evita attacchi di SQL injection (ad esempio per valori di stringa) ed è più robusto di fronte alle modifiche alle impostazioni del database.

Per la conversione originale in un DateTime, suggerisco di utilizzare DateTime.ParseExact o DateTime.TryParseExact per specificare esplicitamente il formato previsto.

+2

Con la mia esperienza con MySQL, probabilmente a causa delle impostazioni di collation, non sempre accetta 'System.DateTime' e il modo migliore per garantire un lavoro corretto su qualsiasi server è convertire la data in stringhe in formato' aaaa-MM-gg ..' – abatishchev

0

questo funziona per me:

data

1.Extract dalla base di dati Oracle e passarlo a variabile

string lDat_otp = ""; 

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

2.Conversion in formato mysql

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

3.PASS formatForMySql variabile alla procedura oa qualcos'altro