Asp.net-Mvc

應用偏移時表示的 UTC 時間必須介於 0 年和 10,000 年之間。參數名稱:偏移量

  • December 10, 2012

我在 ASP.NET MVC3 控制器中有以下程式碼:

public PartialViewResult GetCalendar(int? month, int? year)
   {
       var test = new DateTime((year.HasValue ? year.Value : 1), (month.HasValue ? month.Value : 1), 1);
       return PartialView("Calendar", new DateTimeOffset(test));
   }

我的視圖模型是DateTimeOffset?

拋出異常的原因是什麼?

構造DateTimeOffset函式首先將任何DateTime不屬於Kind“UTC”的時間轉換為等效的 UTC 時間。然後它將檢查 UTC 等效值是否超出andDateTime的範圍,如果超出,將拋出與您正在經歷的相似的情況。DateTimeOffset.MinValue``DateTimeOffset.MaxValue``ArgumentOutOfRangeException

檢查您正在使用DateTime.Kind的變數test,如果它不是“UTC”,則確定轉換為 UTC 是否會使DateTime指定的test值超出這些範圍 - 根據 MSDN 文件,MinValueMaxValue(在 UTC 中)是分別為“1/1/0001 12:00:00 AM +00:00”和“12/31/9999 11:59:59 PM +00:00”。

文件(DateTimeOffset.MinValue)注意到:

“在方法執行與 MinValue 的比較之前,任何 DateTimeOffset 值都會轉換為協調世界時 (UTC)。這意味著日期和時間接近最小範圍但偏移量為正的 DateTimeOffset 值可能會引發異常。例如,值 1/1/0001 1:00:00 AM +02:00 超出範圍,因為它在轉換為 UTC 時比 MinValue 早一小時。”

還有(DateTimeOffset.MaxValue):

“任何 DateTimeOffset 值在方法將其與 MaxValue 進行比較之前都會轉換為協調世界時 (UTC)。這意味著日期和時間接近最大範圍但偏移量為負的 DateTimeOffset 值可能會引發異常。對於例如,值 12/31/9999 11:00 PM -02:00 超出範圍,因為它在轉換為 UTC 時比 MaxValue 晚一小時。”

根據文件(DateTimeOffset Constructor),應用於非 UTCKind的偏移量是“本地系統目前時區的偏移量”。

引用自:https://stackoverflow.com/questions/13799214