簡體   English   中英

覆蓋DateTime.MinValue

[英]Override DateTime.MinValue

我正在使用返回1.1.0001的Datetime.Minvalue 此值無法存儲到DB,因為年份小於1975年。

是否可以將DateTime.Minvalue覆蓋為1.1.1901?

問候

不,這不對。 您可以使用SqlDateTime.MinValue (1753-01-01),為1901-01-01定義自己的常量,如果這是你想要使用的,或實際使用可以為空的DateTime:

DateTime? dateVal = null;

在沒有指定日期的情況下,null可能更有意義並且將DBNull.Value持久化到數據庫而不是像您當前正在執行的“特殊”值。

或者,作為最終選項....在您繼續訪問數據庫時,請檢查DateTime.MinValue並切換替代方案。 但我推薦可以為空的DateTime。

有可能的。 每個發現此代碼的人都會討厭你。 有些人可能會傷害你。

typeof(DateTime)
    .GetField ("MinValue")
    .SetValue (typeof(DateTime), new DateTime(1901, 1, 1));

怎么用這個方法

DateTime GetMinDateTime()
{
   return DateTime.MinValue.AddYears(900);
}

你應該使用可空的DateTime來做這樣的事情。

不,這是一個靜態字段,那些不能被覆蓋。

您需要編寫一個Guard或某種轉換

不可以。由於DateTime.MinValue是靜態的,因此沒有簡單的覆蓋方法。 我建議用常量替換DateTime.MinValue,或者在數據訪問代碼中,將DateTime.MinValue的DateTime值轉換為1900-01-01。

如果您只編寫Microsoft SQL Server,則可以將System.DateTime替換為System.Data.SqlTypes.SqlDateTime。 如果我已正確理解,System.Data.SqlTypes數據類型與數據庫數據類型直接兼容,這可以避免遇到的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM