6
votes

C #: Pourquoi mon sqldateTime est-il différent de différentes machines?

Je viens de trouver que mon sqldatetime.minvalue est différent sur différentes machines.

Parfois c'est = DateTime (1953, 1, 1, 0, 0, 0); P>

mais sur d'autres machines C'est = DateTime (1753, 1, 1, 0, 0, 0); P>

Comment cela peut-il être? WinXP SP2. P>

EDIT: stry> P>

Mon code était comme ceci: p>

DateTime date;

...

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


5 commentaires

Comment utilisez-vous la valeur? I.E. Y a-t-il un type de coulée de type (par exemple à une chaîne de chaîne) - si oui, pourrait-il être à la hauteur des paramètres régionaux affectant le casting?


Dupe: Stackoverflow.com/questions/805770/ ...


Ceci est pas un duplicata. Cette question concerne pourquoi sqldateTime.minvalue! = DateTime.minvalue, une question différente


Oui, la différence entre les deux est évidente lorsque vous essayez de mettre DateTime.Minvalue dans SQL Server, car elle n'affuge pas les dates avant 1753, ce qui était la date à laquelle le calendrier grégorien a été adopté par la Grande-Bretagne.


@Chris S - Sauf si vous utilisez le nouveau type de données DateTime2, qui prend en charge la même plage que la structure DateTime.


4 Réponses :


0
votes

Êtes-vous sûr que vous êtes correct sur les différentes valeurs? SQLATETime est documenté Comme ayant une date de début fixe chez MSDN pour toutes les versions du .NET Framework:

La date minimale valide pour une structure SQLDATETIME est le 1er janvier 1753.

Si c'est véritablement reproductible, il semble que ce soit un bug dans le cadre .NET (ou la documentation) afin que Microsoft soit les gens à demander de l'aide. Les appels de support sont libres si le problème se trouve être un bogue.


0 commentaires

1
votes

Je sais que ce problème s'est produit sur les anciennes machines Windows NT, où la plage de dates était de 1953-XXXX, au lieu de 1753-9999. Êtes-vous totalement sûr que ces machines fonctionnent à la fois Windows XP?


0 commentaires

0
votes

Comme d'autres personnes ont dit, sqlateTetime code> statique em> constructeur définit l'année. Donc, à moins que vous appeliez un autre constructeur, il n'y a pas d'explication évidente.

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


0 commentaires

0
votes

sur une légère tangente, mais comme vous utilisez sqldateTime.minvalue comme une valeur spéciale, je vous suggère d'utiliser un NULLLABLE DateTime plutôt que celui-ci: XXX

Remarque Le raccourci pour un type nullable utilise le point d'interrogation: par exemple DateTime?

Comme je l'ai dit dans mon commentaire, je me demande s'il y a une ficelle à la chaîne qui fait apparaître que SqldateTime.Minvalue renvoie une valeur de différence, quand c'est en fait la mise en forme de la chaîne qui est en fait le problème (par exemple, des paramètres régionaux).


0 commentaires