2012-04-11 14 views
0

C#DateTimeを使用して、0(または深夜)を過ぎた時刻を減算したいと思います。しかし、そうする際にエラーが発生します。タイムラインを作成しようとしています。タイムラインをズームインしたりズームアウトしたり、時間をスクロールすることができます。次のエラーが表示されます。「加算または減算した値は、表現できないDateTimeになります。」DateTime error 0時間から減算

DateTimeは0から23まで折り返す方法を知らないと思いますか?これをどうやって回避するのですか?

+11

コードを投稿してください。何をしているのかわかります。 – Oded

+1

ようこそstackoverflowへ。 Fyi、十分な情報がない質問は、閉鎖されたり、投票に失敗する傾向があります。可能な限り、[SSCCE](http://sscce.org/)を必ず含めてください。それは他の人があなたの問題を理解するのを助けることをはるかに容易にします。 – Leigh

答えて

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

Jon Skeetが[彼の答え](http://stackoverflow.com/a/10113564/1583)に掲載されているように、それが 'DateTime.MinValue'未満にならない限り。 – Oded

+1

「01/01/0001 00:00:00」よりも小さい日付/時刻をどのようなシナリオで表現したいのですか?それを行うために 'DateTime'が必要な場合は、設計上の大きな問題が発生している可能性が最も高いです。 – qJake

+0

ダンノー。しかし、OPのより多くの情報がなければ、何が試みられているかはわかりません。あなたは10,000BCをどのように代表しますか? – Oded

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); 

あなた本当にがちょうどDateTimeではなく、より豊かな型システムとJoda Timeの私の擬似ポート、Noda Timeの使用を検討し、「ジャストインタイム」の表現をしたい場合。

+0

あなたは正しいです。 – user1327569