【问题标题】:Decrement date month transition递减日期月份转换
【发布时间】:2022-01-26 00:44:19
【问题描述】:

我有一个函数可以在每次调用时将日期递减一天。

private IEnumerable<DateTime> EachDay(DateTime from, DateTime thru)
{
    for (var day = thru.Date; day.Date >= from.Date; day = day.Subtract(TimeSpan.FromDays(1)))//day.AddDays(-1))
    {
        yield return day;
    }
}

在我到达上个月之前似乎工作正常。如果有人有解决方案?

【问题讨论】:

  • 当您到达上个月时会发生什么?你能举例说明你是如何使用它的吗?
  • 描述它如何不符合您的期望
  • 到底是什么问题?还有为什么不只是day = day.AddDays(-1)

标签: c# datetime calculation decrement


【解决方案1】:

我会使用这样的东西

private IEnumerable<DateTime> EachDay(DateTime from, DateTime thru)
{
    var days=(thru.Date - from.Date).Days;
    if (days <= 0)  yield return DateTime.MinValue;
    else for (var day = days; day >= 0; day-=1)
    yield return from.Date.AddDays(day);
}

测试

var thru =new DateTime(day: 01,month:12, year:2021); 
var from= thru.AddDays(-10);
EachDay(from,thru).Dump();

结果

    2021-12-01
    2021-11-30
    2021-11-29
    2021-11-28
    2021-11-27
    2021-11-26
    2021-11-25
    2021-11-24
    2021-11-23
    2021-11-22
    2021-11-21

【讨论】:

  • 感谢您的提议,但问题没有解决。例如,当我给出 01/12/2021 时,响应是 01/00/2021 而不是 30/11/2021。
  • @sviardot 请给出 2 个日期,from 和 to,当它不起作用时,另一个日期必须是无效的
【解决方案2】:

尽管有我的其他回答,但您在评论 Serge 的回答时说:

当我给出 01/12/2021 时,响应是 01/00/2021

我只是想指出,如果您的日期是 2021 年 1 月 12 日午夜,并且在打印时不小心使用了 dd/mm/yyyy 的日期格式,您可能会收到此信息

mm 是分钟,而不是几个月。 MM 是几个月.. 如果您使用 mm 串起您的日期,那么您看到的 00 是从 00:00:00 开始的分钟,而不是月份

您的整个代码中的所有内容都可能没问题 (it seems fine to me),但您被 ToString 中的拼写错误误导了

【讨论】:

    【解决方案3】:

    在某种程度上,您在这里重新发明了一个轮子。你可以使用 Enumerable.Range 来做你的日期:

    var f = // the date from eg DateTime.Now;
    var t = // the date to eg DateTime.Now.AddDays(-45);
    
    //this line of code generates the dates 
    var d = Enumerable.Range(0, 1 + (int)((f-t).TotalDays)).Select(x => f.AddDays(-x));   
        
    

    d 中的日期有 no problem crossing a month boundary

    【讨论】:

      【解决方案4】:

      终于明白了。我将值存储在数据库中,一段代码引发从本地日期格式到法国日期格式的隐式转换。 我强制在所有代码中使用本机日期格式,现在一切都很好。

      感谢您的回复

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-24
        • 1970-01-01
        • 2017-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多