2010-01-12 14 views
5

Acabo de encontrar que mi SqlDateTime.MinValue es diferente en diferentes máquinas.C#: ¿Por qué mi SqlDateTime.MinValue es diferente en diferentes máquinas?

A veces es = DateTime (1953, 1, 1, 0, 0, 0);

pero en otras máquinas es = DateTime (1753, 1, 1, 0, 0, 0);

¿Cómo puede ser eso? El sistema operativo en ambas máquinas es WinXP SP2.

Editar:

Mi código era así:

DateTime date; 

... 

if (date == SqlDateTime.MinValue) 
{ 
    return "(any)"; 
} 
else 
{ 
    return date.ToString(); 
} 

Este código no debería devolver 1 de enero de, 1753 pero lo hizo (en algunas máquinas). Los minutos y segundos de la fecha no son utilizados por mi código y siempre deben permanecer como valores predeterminados.

+0

¿Cómo está utilizando el valor? es decir, ¿hay algún tipo de transmisión en curso (por ejemplo, para y desde la cadena)? De ser así, ¿podría deberse a ajustes regionales que afecten a la conversión? – AdaTheDev

+0

dupe: http://stackoverflow.com/questions/805770/sqldatetime-minvalue-c-datetime-minvalue-why – Dhana

+4

Esto es ** no ** un duplicado. Esa pregunta se relaciona con por qué SqlDateTime.MinValue! = DateTime.MinValue, una pregunta diferente – AdaTheDev

Respuesta

0

¿Estás seguro de que tienes razón sobre los diferentes valores? SqlDateTimedocumented as having a fixed start date at MSDN es para todas las versiones de .NET Framework:

La fecha válida para una estructura mínima SqlDateTime es el 1 de enero de 1753.

Si es genuinamente reproducibles entonces suena como que sería una error en .NET Framework (o la documentación) para que Microsoft sea la persona a quien pedir ayuda. Las llamadas de soporte son gratuitas si se encuentra que el problema es un error.

1

Sé que este problema ocurrió en máquinas Windows NT antiguas, donde el intervalo de fechas era 1953-XXXX, en lugar de 1753-9999. ¿Estás totalmente seguro de que estas máquinas funcionan con Windows XP?

0

Como han dicho otros, SqlDateTimeconstructor estático establece el año. Entonces, a menos que llame a otro constructor, no hay una explicación obvia.

static SqlDateTime() 
{ 
    ... 
    MinYear = 1753; 
    ... 
} 

Reflector muestra como 0x6d9

0

En un ligero tangente, pero como se está utilizando SqlDateTime.MinValue como un valor especial, me gustaría sugerir que utilice un nullable DateTime lugar como esto:

DateTime? date = null; 
... 
if (!date.HasValue) 
{ 
    return "(any)"; 
} 
else 
{ 
    return date.Value.ToString(); 
} 

Tenga en cuenta que la abreviatura de un tipo anulable está utilizando el signo de interrogación: por ejemplo ¿Fecha y hora?

Como dije en mi comentario, me pregunto si hay un molde para la cadena que hace que parezca que SqlDateTime.MinValue está devolviendo un valor de diferencia, cuando de hecho es el formato de la cadena el que realmente es el problema (ej. Ajustes regionales).

Cuestiones relacionadas