DateTimeから日数を引く


142

C#プログラムに次のコードがあります。

DateTime dateForButton =  DateTime.Now;  
dateForButton = dateForButton.AddDays(-1);  // ERROR: un-representable DateTime

実行するたびに、次のエラーが発生します。

加算または減算された値は、表現できない日時になります。
パラメータ名:値

これまでにこのエラーメッセージを見たことがなく、なぜ表示されているのか理解できません。これまでに読んだ回答から、加算演算で-1を使用して日数を減算できると思いますが、私の質問が示すように、これは私がしようとしていることには当てはまりません。


動作するはずですが、これは問題のある領域ですか?
V4Vendetta 2012年

1
それが持っている ...これですべての問題が表示されていない、仕事に
Tigran

12
このエラーは通常、間隔を差し引こうとしたりDateTime.MinValue、何かを追加しDateTime.MaxValueたりした場合(またはこの最小-最大間隔外の日付をインスタンス化しようとした場合)に発生します。MinValueどこかに割り当てていないのですか?
Cyber​​Dude

1
Cyber​​Dude、あなたのコメントは実際にはAnswerです。コメントに投票して回答として割り当てるにはどうすればよいですか?
ブエナ

1
コードの2行目と3行目の間にコードを投稿してください
Panagiotis Kanavos

回答:


70

このエラーは通常、間隔を差し引こうとしたりDateTime.MinValue、何かを追加しDateTime.MaxValueたりした場合(またはこの最小-最大間隔外の日付をインスタンス化しようとした場合)に発生します。MinValueどこかに割り当てていないのですか?


287
DateTime dateForButton = DateTime.Now.AddDays(-1);

14
この答えは、トピックのタイトルに答えてください。これは決して反対投票すべきではありません。ほとんどの人々はグーグルからここに来ます。誰かがこの回答に同意しない場合は、トピックのタイトルを編集してください。¬¬
MarceloBarbosa

何ヶ月にもわたって私のために働いた。
David Jones、



7

dateTime.AddDays(-1) その1日を減算しませんdateTime参照。元の参照から1日を引いた新しいインスタンスが返されます。

DateTime dateTime = DateTime.Now;
DateTime otherDateTime = dateTime.AddDays(-1);

これがOPの問題をどのように解決するかを説明する気はありますか ほとんど誰でもコードを記述できますが、それは簡単な部分です。(ただし、この場合、実際にこれがOPの問題をどのように解決するかはまったくわかりません。)
fourpastmidnight '17年

5

AddDays(-1)の使用に問題がありました

私の解決策はTimeSpanです。

DateTime.Now - TimeSpan.FromDays(1);

あなたの正確な問題は何でしたか?
Arash.Zandi

4

AddDaysメソッドのオブジェクト(宛先変数)をソースと同じにすることはできません。

の代わりに:

DateTime today = DateTime.Today;
today.AddDays(-7);

代わりにこれを試してください:

DateTime today = DateTime.Today;
DateTime sevenDaysEarlier = today.AddDays(-7);

1
他の既存の回答に目を向ければ、この回答は実際には新しいポイントをもたらしません。
Isuka

1

日付オブジェクトから直接日数を直接減らすのではなく、最初に日付値を取得してから日数を減算します。以下の例を参照してください:

DateTime SevenDaysFromEndDate = someDate.Value.AddDays(-1);

ここで、someDateはDateTime型の変数です。


0

使用する AddDays(-1)私が数か月を越えることを試みるまで、は私のために働きました。2017-01-01から2日間減算すると、2016-00-30になります。月の変更を正しく処理できませんでした(年は問題ないようでしたが)。

使用date = Convert.ToDateTime(date).Subtract(TimeSpan.FromDays(2)).ToString("yyyy-mm-dd"); して問題ありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.