Estoy escribiendo una aplicación web bastante grande en asp.net/c#
con MSSQL 2008 r2
en la base de datos. El programa necesita convertir cadenas date/time
(en formato de fecha ISO) a DateTime
donde se usan y más tarde se almacenan como smalldatetime
en sql
.Convertir a y desde datetime agrega una hora?
Cuando las cadenas se convierten a datetimes
, se agrega misteriosamente un hour
al resultado. Entiendo que estando en el Reino Unido, estamos sujetos al horario de verano (actualmente activo) pero seguramente el método datetime
.convert entiende esto? Al convertir de nuevo a una cadena, el resultado es el esperado.
He escrito un pequeño programa para ilustrar el problema (también incluyendo fechas ISO no para mi salud mental):
class Program
{
static void Main(string[] args)
{
//BB();
//Dist();
DateTime d1 = new DateTime();
DateTime d2 = new DateTime();
string d1s = "2010-09-13T09:30:01Z";
string d2s = "2010-09-13 09:30:01";
d1 = Convert.ToDateTime(d1s);
d2 = Convert.ToDateTime(d2s);
Console.WriteLine("d1s:{0} d1:{1} ", d1s, d1);
Console.WriteLine("d2s:{0} d2:{1} ", d2s, d2);
d1s = d1.ToString("u"); d2s = d2.ToString("u");
Console.WriteLine("\nd1: {0}", d1s);
Console.WriteLine("d2: {0}", d2s);
d1 = Convert.ToDateTime(d1s);
d2 = Convert.ToDateTime(d2s);
Console.WriteLine("\nd1s:{0} d1:{1} ", d1s, d1);
Console.WriteLine("d2s:{0} d2:{1} ", d2s, d2);
Console.Read();
}
}
Estos son los resultados que obtengo cuando corro el programa:
d1s:2010-09-13T09:30:01Z d1:13/09/2010 10:30:01
d2s:2010-09-13 09:30:01 d2:13/09/2010 09:30:01
d1: 2010-09-13 10:30:01Z
d2: 2010-09-13 09:30:01Z
d1s:2010-09-13 10:30:01Z d1:13/09/2010 11:30:01
d2s:2010-09-13 09:30:01Z d2:13/09/2010 10:30:01
Done
¿Es este el comportamiento correcto? ¿Estoy siendo un idiota? Esperaría convertir datetime a string y luego la cadena exacta volvería a datetime devolvería la entrada original. Si este es el comportamiento correcto, ¿alguna idea sobre cómo obtener un resultado consistente pero aún usando Convert.ToDateTime()
?
Muchas gracias.
Ahh, por lo que soltar la "Z" arreglará las cosas. Tendré que hacer una cadena de respuestas porque ese es el formato en el que lo obtengo. (Editar, sí, eso pareció arreglarlo. Gracias) –