2010-01-12 15 views
5

Ho appena scoperto che il mio SqlDateTime.MinValue è diverso su macchine diverse.C#: perché il mio SqlDateTime.MinValue è diverso su macchine diverse?

A volte è = DateTime (1953, 1, 1, 0, 0, 0);

ma su altre macchine è = DateTime (1753, 1, 1, 0, 0, 0);

Come può essere? Il sistema operativo su entrambe le macchine è WinXP SP2.

Edit:

Il mio codice è simile a questo:

DateTime date; 

... 

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

Questo codice non deve mai tornare 1 gen 1753 ma lo ha fatto (su alcune macchine). I minuti e i secondi di data non vengono utilizzati dal mio codice e devono sempre rimanere valori predefiniti.

+0

Come stai usando il valore? cioè c'è un casting di tipo in corso (ad es. da e da stringa) - in caso affermativo, potrebbero essere le impostazioni regionali che influiscono sul casting? – AdaTheDev

+0

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

+4

Questo è ** non ** un duplicato. Questa domanda si riferisce al perché SqlDateTime.MinValue! = DateTime.MinValue, una domanda diversa – AdaTheDev

risposta

0

Sei sicuro di avere ragione sui diversi valori? SqlDateTime è documented as having a fixed start date at MSDN per tutte le versioni di .NET Framework:

La data valida minima per una struttura SqlDateTime è il 1 ° gennaio 1753.

Se è veramente riproducibile allora suona come sarebbe un bug in .NET Framework (o nella documentazione), quindi Microsoft sarebbe la persona a chiedere aiuto. Le chiamate di supporto sono gratuite se si riscontra un bug nel problema.

1

So che questo problema si è verificato sui vecchi computer Windows NT, in cui l'intervallo di date era 1953-XXXX, anziché 1753-9999. Sei assolutamente sicuro che queste macchine stiano utilizzando Windows XP?

0

Come altri hanno già detto, SqlDateTimestatico costruttore imposta l'anno. Quindi, a meno che non chiami un altro costruttore, non c'è una spiegazione ovvia.

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

Riflettore lo mostra come 0x6d9

0

Su un lieve tangente, ma come si utilizza SqlDateTime.MinValue come un valore speciale, io suggerirei di usare un nullable DateTime invece in questo modo:

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

Nota la stenografia per un tipo nullable utilizza il punto interrogativo: ad es. Appuntamento?

Come ho detto nel mio commento, mi chiedo se c'è un cast to string che sta facendo sembrare che SqlDateTime.MinValue restituisca un valore di differenza, quando in realtà è la formattazione della stringa che è in realtà il problema (es. impostazioni regionali).

Problemi correlati