2012-04-11 53 views
0

使用C#DateTime,我想減去過去0(或午夜)的時間。但是,這樣做時出現錯誤。我試圖創建一個時間軸,您可以放大和縮小並滾動瀏覽時間。我收到以下錯誤:「添加或減少的值會導致無法表示的DateTime。」DateTime錯誤從0小時減去

我猜DateTime不知道如何從0到23迴繞?我如何解決這個問題?

+11

請發佈您的代碼,以便我們可以看到您在做什麼。 – Oded 2012-04-11 20:34:09

+1

歡迎使用stackoverflow。 Fyi,沒有足夠信息的問題往往會被封閉或被拒絕投票。只要有可能,一定要包含[SSCCE](http://sscce.org/)。它使其他人更容易幫助你解決問題。 – Leigh 2012-04-11 23:31:15

回答

2

如果從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] 
+0

除非它小於'DateTime.MinValue',正如Jon Skeet在[他的回答](http://stackoverflow.com/a/10113564/1583)中發佈的那樣。 – Oded 2012-04-11 20:40:07

+1

是正確的,但是在什麼情況下,您想表示的日期/時間少於「01/01/0001 00:00:00」?如果你需要'DateTime'來做到這一點,你很可能會遇到更大的設計問題。 – qJake 2012-04-11 20:41:42

+0

鄧諾。但是如果沒有更多的OP信息,我們就不知道要做什麼。那麼你如何代表10,000BC? – Oded 2012-04-11 20:42:26

2

我的猜測是,你正在使用的開始於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僞端口。

+0

你是對的。 – user1327569 2012-04-12 13:23:36

相關問題