2012-04-26 6 views
6

hay algo que no pude entender con DateTime.ToOaDate().problema con DateTime.ToOADate()

aquí es lo que tengo

var plainDate = "01/07/2011"; 
var dateTime1 = DateTime.Parse(plainDate, new CultureInfo("en-GB")); 
var value = dateTime1.ToOADate(); 
var dateTime2 = DateTime.Parse(DateTime.FromOADate(value).ToString(), new CultureInfo("en-GB")); 

dateTime1 y datetime2 debe ser el mismo, ¿verdad? solo convertí la fecha simple en marcas y luego lo recuperé como DateTime con la misma cultura ,, pero en realidad cuando lo ejecuto dateTime2 tiene el valor de (7-Jan-2011) en lugar de (1-Jul-2011)

+1

Esto no tiene nada que ver con 'ToOADate()'. Elimine la línea 'value' y simplemente use' DateTime.Parse (dateTime1.ToString(), new CultureInfo (...)) 'y verá exactamente el mismo efecto. Son las conversiones de cadena las que están causando el problema, no 'ToOADate' y' FromOADate' ... –

Respuesta

5

Creo que es porque su llamada a ToString no especifica la información cultural.

Pruebe ToString(new CultureInfo("en-GB")) también.

+0

sí, ahora es idéntico ... muchas gracias :) –

5

Al hacer DateTime.Parse, está especificando el formato que espera la fecha de entrada para estar en.

Al hacer ToString(), está especificando que la cultura actual se debe utilizar para dar formato a la fecha.

Aquí, supongo que su Thread.CurrentThread.CurrentCulture.DateTimeFormat está devolviendo un formato de EE. UU. Por lo tanto, DateTime.FromOADate(value).ToString() devuelve 07/01/2011, cuando luego analiza esto usando en-GB, regresa el 7 de enero.