【问题标题】:Subtract days from a DateTime从 DateTime 中减去天数
【发布时间】:2012-06-24 12:04:45
【问题描述】:

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

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

每当我运行它时,我都会收到以下错误:

相加或相减的值会导致无法表示的日期时间。
参数名称:值

我以前从未见过此错误消息,也不明白我为什么会看到它。从我到目前为止阅读的答案中,我相信我可以在加法操作中使用 -1 来减去天数,但正如我的问题所表明的那样,我正在尝试做的事情并非如此。

【问题讨论】:

  • 应该可以,这是问题区域吗?
  • 已经工作了,看不出有什么问题...
  • 当您尝试从DateTime.MinValue 中减去一个间隔,或者您想向DateTime.MaxValue 添加一些内容(或者您尝试实例化一个超出此最小-最大间隔的日期)时,通常会发生该错误。你确定你没有在某处分配MinValue
  • Cyber​​Dude,您的评论实际上是答案。我如何对您的评论进行投票并将其分配为答案?
  • 请将代码贴在代码的第 2 行和第 3 行之间

标签: c# datetime


【解决方案1】:

您可以使用以下代码:

dateForButton = dateForButton.Subtract(TimeSpan.FromDays(1));

【讨论】:

  • 如果日期是 DateTime.MinValue,这也会失败。 AddDays(-1) 也同样有效
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    DateTime dateForButton = DateTime.Now.AddDays(-1);
    

    【讨论】:

    • 这个答案,回答题目标题。这绝不应该被否决。大多数人从谷歌来到这里。如果有人不同意这个答案,应该对主题标题进行编辑。 ¬¬
    • 为我工作了几个月。
    【解决方案4】:

    你可以这样做:

    DateTime.Today.AddDays(-1)
    

    【讨论】:

      【解决方案5】:

      AddDays 方法的对象(即目标变量)不能与源相同。

      代替:

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

      试试这个:

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

      【讨论】:

      • 如果我们正在寻找其他现有答案,这个答案并没有真正带来新的观点。
      【解决方案6】:

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

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

      【讨论】:

      • 想解释一下这将如何解决 OP 的问题?几乎任何人都可以编写代码,这很容易。 (但是,在这种情况下,我实际上根本看不到这将如何解决 OP 的问题。)
      【解决方案7】:

      使用AddDays(-1) 为我工作,直到我尝试跨越数月。当我试图从 2017-01-01 中减去 2 天时,结果是 2016-00-30。它无法正确处理月份的变化(尽管年份似乎很好)。

      我用date = Convert.ToDateTime(date).Subtract(TimeSpan.FromDays(2)).ToString("yyyy-mm-dd"); 并且没有问题。

      【讨论】:

      【解决方案8】:

      我在使用 AddDays(-1) 时遇到了问题。

      我的解决方案是 TimeSpan

      DateTime.Now - TimeSpan.FromDays(1);
      

      【讨论】:

      • 您的具体问题是什么?
      【解决方案9】:

      不是直接从日期对象中直接减少天数,而是先获取日期值然后减去天数。见下例:

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

      这里,someDate 是 DateTime 类型的变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-07
        • 1970-01-01
        相关资源
        最近更新 更多