DataSetDateTime.Local: 對于DateTimeKind.Local時間,不做任何轉換;對于DateTimeKind.Utc時間,基于時區偏移量進行轉換,并将Kind屬性轉換成DateTimeKind.Local;對于DateTimeKind.Unspecified,直接将Kind屬性轉換成DateTimeKind.Local,時間值(年、月、日、時、分、秒、毫秒等)保持不變;
DataSetDateTime.Utc: 對于DateTimeKind.Utc時間,不做任何轉換;對于DateTimeKind.Local時間,基于時區偏移量進行轉換,并将Kind屬性轉換成DateTimeKind.Utc;對于DateTimeKind.Unspecified,直接将Kind屬性轉換成DateTimeKind.Utc,時間值(年、月、日、時、分、秒、毫秒等)保持不變;
DataSetDateTime.Unspecified|UnspecifiedLocal:對于任何DateTimeKind類型的時間,直接将Kind屬性轉換成DateTimeKind.Unspecified,時間值(年、月、日、時、分、秒、毫秒等)保持不變。

然後,我寫了下面三個輔助的方法:CreateContact通過傳入的表示生日的DateTime建立一個ContractDataSet,DisplayBirthday分别将上訴四個字段的時間和Kind列印出來。
我們的執行個體程式是這樣的:分别建立基于三種不同的DateTimeKind的DateTime對象,并據此建立三個ContractDataSet對象。最後調用DisplayBirthday方法将4個基于不同DateTimeMode的字段的時間和DateTimeKind列印出來。
最終的輸出結果證明了我們上述的關于時間轉換規則的結論:
到不前為止,我們貌似還看不到DataSetDateTime.Unspecified和DataSetDateTime.UnspecifiedLoca的差别。實際上,它們的差别展現在序列化上面:DataSetDateTime.UnspecifiedLoca在序列化的時候會保留基于目前時區的偏移量,而DataSetDateTime.Unspecified則不會。這個結論我也可以執行個體來證明,為此我寫了如下一段代碼對ContactDataSet進行序列化,并将序列化後的XML列印出來。
從輸出的結果我們可以看出UnspecifiedBirthday和UnspecifiedLocalBirday之間的差别,後者有+8的偏移量,前者沒有。