2010-01-12 68 views
5

我剛剛發現我的SqlDateTime.MinValue在不同的機器上是不同的。C#:爲什麼我的SqlDateTime.MinValue在不同的機器上有所不同?

有時它是= DateTime(1953,1,1,0,0,0);

但在其他機器上它= DateTime(1753,1,1,0,0,0);

這怎麼可能?兩臺機器上的OS都是WinXP SP2。

編輯:

我的代碼是這樣的:

DateTime date; 

... 

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

此代碼不應該返回1753年1月1,但它確實(在某些機器上)。 我的代碼沒有使用日期的分鐘和秒數,並應始終保持默認值。

+0

你是怎麼使用這個值的?即是否有任何類型的投射正在進行(例如,從絃樂到絃樂) - 如果是這樣,是否可以歸結爲影響投射的區域設置? – AdaTheDev 2010-01-12 11:17:21

+0

dupe:http://stackoverflow.com/questions/805770/sqldatetime-minvalue-c-datetime-minvalue-why – Dhana 2010-01-12 11:24:53

+4

這是**不是**重複。這個問題涉及爲什麼SqlDateTime.MinValue!= DateTime.MinValue,一個不同的問題 – AdaTheDev 2010-01-12 11:28:20

回答

0

你確定你對不同的值是正確的嗎? SqlDateTimedocumented as having a fixed start date at MSDN爲.NET Framework的所有版本:

的SQLDATETIME結構的最小有效日期是1月1日,1753年

如果是真正可重複的,然後它聽起來像它會是一個.NET框架(或文檔)中的錯誤,所以微軟將會是人們尋求幫助。如果問題被發現是一個錯誤,支持電話是免費的。

1

我知道這個問題發生在舊的Windows NT機器上,日期範圍是1953-XXXX,而不是1753-9999。你完全確定這些機器都運行Windows XP嗎?

0

正如其他人所說,SqlDateTime靜態構造函數設置年份。所以除非你調用另一個構造函數,否則沒有明顯的解釋。

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

反射顯示它作爲0x6d9

0

有輕微的切線,但你正在使用SqlDateTime.MinValue作爲一種特殊的價值,我建議你使用nullable日期時間,而不是像這樣:

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

注意可空類型的簡寫使用問號:例如約會時間?

正如我在我的評論中所說的,我想知道是否有一個字符串轉換,使得看起來SqlDateTime.MinValue返回一個差值,而實際上它是字符串的格式實際上是問題(例如區域設置)。

相關問題