从DateTime减去天


142

我的C#程序中有以下代码。

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

每当我运行它时,都会出现以下错误:

相加或相减的值将导致无法表示的DateTime。
参数名称:值

我以前从未见过此错误消息,也不知道为什么会看到它。从到目前为止我得到的答案中,我可以认为我可以在加法运算中使用-1来减去天,但是正如我的问题所示,我尝试做的并非如此。


应该工作,这是问题区域吗?
V4仇杀队2012年

1
必须正常工作,对此没有任何问题...
Tigran 2012年

12
当您尝试从中减去一个间隔DateTime.MinValue或要向其中添加一些内容时DateTime.MaxValue(或尝试实例化此最小-最大间隔之外的日期时),通常会发生该错误。您确定没有分配位置MinValue吗?
Cyber​​Dude 2012年

1
Cyber​​Dude,您的评论实际上是答案。我如何才能对您的评论进行投票并将其分配为答案?
布埃纳2012年

1
请张贴线2和代码3之间的代码
帕纳约蒂斯Kanavos

Answers:


70

当您尝试从中减去一个间隔DateTime.MinValue或要向其中添加一些内容时DateTime.MaxValue(或尝试实例化此最小-最大间隔之外的日期时),通常会发生该错误。您确定没有分配位置MinValue吗?


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

14
这个答案,回答题目标题。这绝不应该被否决。大多数人来自Google。如果有人不同意此答案,则应对主题标题进行编辑。¬¬
MarceloBarbosa

甚至为我工作了几个月。
David Jones



7

dateTime.AddDays(-1) 不减去一天,有一个dateTime参考。它将返回一个新实例,并从原始引用中减去这一天。

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

小心解释这将如何解决OP的问题?几乎任何人都可以编写代码,这很容易。(但是,在这种情况下,我实际上根本看不到如何解决OP的问题。)
fourpastmidnight

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"); ,没有问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.