.NET的DateTime表示的時間範圍更廣了,可以表示從0001年1月1日開始直到9999年12月31日結束,共9999年的時間。零值時間是範圍起始時間,即0001年1月1日。
SQL Server的 datetime類型只可以表示從1753年1月1日開始到9999年12月31日結束,共8247年的時間。零值時間卻不是範圍起始時間,而是1900年1月1日。從1753年1月1日至1900年1月1日之間的時間值是用負數表示的。
雖然SQL Server表示時間的範圍小些,但時間的精度卻要高出許多。SQL Server的datetime的時間精度是1/300秒,即3.33毫秒。而.NET的DateTime的時間精度是1/10秒,即100毫秒。顯然 SQL Server的時間精度比.NET高30倍。
不過,.NET Framework 從 2.0開始,DateTime實現了本地時間和國際標準時間間的處理。這對於經常需要進行時區轉換的應用來說無疑是個福音。
在資料結構方面,SQL Server的datetime是一個8位元組的儲存結構。其中的4個位元組儲存按天數計算的日期值,另外4個位元組儲存按1/300秒計算的時間值。
而.NET的DateTime是一個struct實值型別,實際上相當於用64位不帶正負號的整數來儲存,也佔8個位元組的空間。不過只有其中的62位是表示時間的滴答數(Ticks),另外2位標明時間類型是本地時間還是世界時間等等。所謂的滴答數並沒有直接區分日期和時間,通通按100毫秒一次計算從0001年 1月1日零時起經過的滴答數。因此,從DateTime取日期和時間都是通過計算得出來的,當然內部實現只是用簡單的整除加模運算搞定的。
由於DateTime是一個實值型別,在需要將DateTime值作為對象來訪問的地方,就可能就存在隱式或顯式的裝箱和拆箱操作。這也是需要注意的地方。
相信通過這樣的比較可以更瞭解一些基礎類型的內幕,今後編碼時心裡就跟明鏡兒似的,清清楚楚。
李戰(leadzen).深圳 2008-2-12