2011-03-18 8 views
6

que tienen un gran problema con el siguiente código:C# ¿Error de componente de fecha o me falta algo?

DateTime date = DateTime.Now; 
String yearmonthday = date.ToString("yyyy/MM/dd"); 
MessageBox.Show(yearmonthday); 

el problema es, C# utiliza el separador de fecha del sistema en lugar de utilizar siempre "/" como he especificado. Si me quedo ese código, me sale el siguiente resultado:

2011/03/18 

pero si me vaya a "Panel de control" - "Configuración regional y de idioma"> y cambiar el separador de fecha a "-", consigo

2011-03-18 

Incluso si en el método toString especifiqué usar '/'. ¿Me estoy perdiendo algo o es un error de C#/.Net Framework?

Respuesta

5

Trate de esta manera:

String yearmonthday = date.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture); 

o escapar de la /

String yearmonthday = date.ToString(@"yyyy\/MM\/dd"); 
+0

Ok, ahora funciona. Por cierto, parece bastante estúpido tener que especificar ese parámetro si escribo el formato exacto que quiero en la cadena ... – kaharas

+1

@kaharas, '/' tiene un significado especial en el formato => representa el separador de fecha para la cultura actual . –

+0

@Kaharas Me parece estúpido también. Ver mi respuesta – Aliostad

2

InvariantCulture debe hacer el truco

String yearmonthday = DateTime.Now.ToString("yyyy/MM/dd",CultureInfo.InvariantCulture); 
1

Esto es al parecer por diseño.

El trabajo se lleva a cabo en una clase interna llamada DateTimeFormat que se puede ver en este fragmento FormatCustomized método:

case '/': 
     { 
      outputBuffer.Append(dtfi.DateSeparator); 
      num2 = 1; 
      continue; 
     } 

forma que sustituye a / con DateSeparator.

3

El problema es que/está reservado para el carácter de fecha, por lo que este no es un error, es una característica que se interpreta de acuerdo con la configuración regional.

Try escpaing el carácter/con:

var d = DateTime.Now; 
d.ToString("yy\\/mm\\/dd").Dump(); 
Cuestiones relacionadas