2010-09-03 22 views
21

Quiero cambiar el DateTime para MySQL en C#.Convertir DateTime para MySQL usando C#

Mi base de datos MySQL solo acepta este formato 1976-04-09 22:10:00.

En C# tienen una cadena que tienen un valor de fecha:

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

Quiero convertir a MySQL a continuación se vea como:

1976-04-12 22:10 

Cómo puedo cambiarlos o cómo otras programador hacer esto usando el método dd mm hh yy? ¿Alguien puede decirme sobre ellos?

Respuesta

53

Tenga en cuenta que usted puede codificar el formato ISO

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

o utilizar a continuación:

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

y así sucesivamente

+1

hh: mm es formato de 12 horas, necesitará HH: mm. Acabo de actualizar mi código con esa sección –

+0

¡Gran respuesta! Pequeño error sintáctico: DataTimeFormat debe ser DateTimeFormat. –

+0

@DerekW: ¡Gracias! Fijo.Genial :) – abatishchev

13

Si el formato de cadena para el DateTime se fija puede convertir a la System.DateTime usando:

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

Ahora, cuando lo necesite en su formato específico, a continuación, puede revertir el proceso, es decir:

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

edición - código actualizado. Por alguna extraña razón, DateTime.ParseExact no estaba jugando bien.

+0

Por cierto, su código no funciona de la caja, no lo sé ¿por qué? Sin embargo, solo 'DateTime.Parse' funciona correctamente – abatishchev

5

Me gustaría sugerir fuertemente que utilice consultas con parámetros en lugar de enviando valores como cadenas en primer lugar.

De esta forma solo necesita poder convertir su formato de entrada a DateTime o DateTimeOffset, y luego no tiene que preocuparse por el formato de la base de datos. Esto no solo es más simple, sino que evita los ataques de inyección de SQL (por ejemplo, para valores de cadena) y es más robusto frente a los cambios en la configuración de la base de datos.

Para la conversión original a DateTime, sugiero que utilice DateTime.ParseExact o DateTime.TryParseExact para especificar explícitamente el formato esperado.

+2

Con mi experiencia con MySQL, probablemente debido a la configuración de intercalación, no siempre acepta 'System.DateTime' y la mejor manera de garantizar el trabajo adecuado en cualquier servidor es convertir explícitamente la fecha en cadena en formato' aaaa-MM-dd ..'' – abatishchev

0

Esto funciona para mí:

fecha

1.Extract de la base de datos de Oracle y pasarlo a la variable

string lDat_otp = ""; 

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

2.conversion al formato de MySQL

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

3.PASS formatForMySql variable a procedimiento o a algo más