使用C#DateTime,我想減去過去0(或午夜)的時間。但是,這樣做時出現錯誤。我試圖創建一個時間軸,您可以放大和縮小並滾動瀏覽時間。我收到以下錯誤:「添加或減少的值會導致無法表示的DateTime。」DateTime錯誤從0小時減去
我猜DateTime不知道如何從0到23迴繞?我如何解決這個問題?
使用C#DateTime,我想減去過去0(或午夜)的時間。但是,這樣做時出現錯誤。我試圖創建一個時間軸,您可以放大和縮小並滾動瀏覽時間。我收到以下錯誤:「添加或減少的值會導致無法表示的DateTime。」DateTime錯誤從0小時減去
我猜DateTime不知道如何從0到23迴繞?我如何解決這個問題?
如果從DateTime
減去TimeSpan
,將「環繞」午夜:
> var d1 = DateTime.Parse("4/11/2012 12:30:00 AM");
> var d2 = d1.Subtract(new TimeSpan(1, 15, 0));
>
> d2
[4/10/2012 11:15:00 PM]
除非它小於'DateTime.MinValue',正如Jon Skeet在[他的回答](http://stackoverflow.com/a/10113564/1583)中發佈的那樣。 – Oded 2012-04-11 20:40:07
是正確的,但是在什麼情況下,您想表示的日期/時間少於「01/01/0001 00:00:00」?如果你需要'DateTime'來做到這一點,你很可能會遇到更大的設計問題。 – qJake 2012-04-11 20:41:42
鄧諾。但是如果沒有更多的OP信息,我們就不知道要做什麼。那麼你如何代表10,000BC? – Oded 2012-04-11 20:42:26
我的猜測是,你正在使用的開始於DateTime.MinValue
的日期。如果你減去時間,以便它會在DateTime.MinValue
之前,你會得到這個例外。
// This is equal to DateTime.MinValue - maybe you're doing this?
DateTime date = new DateTime();
// Bang
date = date.AddHours(-1);
如果你真的想一「只是一個時間」表示,可以考慮使用Noda Time,我的Joda Time具有相當豐富的類型系統不僅僅是DateTime
僞端口。
你是對的。 – user1327569 2012-04-12 13:23:36
請發佈您的代碼,以便我們可以看到您在做什麼。 – Oded 2012-04-11 20:34:09
歡迎使用stackoverflow。 Fyi,沒有足夠信息的問題往往會被封閉或被拒絕投票。只要有可能,一定要包含[SSCCE](http://sscce.org/)。它使其他人更容易幫助你解決問題。 – Leigh 2012-04-11 23:31:15