【问题标题】:in c #, how to get the last day of next quarter giving the date.?在c#中,如何获取下个季度的最后一天给出的日期。?
【发布时间】:2015-01-28 22:41:52
【问题描述】:

在c#中,如何获取下个季度的最后一天给出日期?

例如,给定日期是 2014-12-02,我需要返回日期 2015-03-31。

【问题讨论】:

  • “下个季度”是什么意思? 2015 年 3 月 31 日是 2014 年 2 月 12 日下一季度的最后一天?
  • 看看Calculate the start-date and name of a quarter from a given date - 那里的答案显示了如何计算当前季度的开始结束,您可以调整它以进行额外的季度。
  • 我已将日期更改为 ISO 日期格式,以适应美国和非美国用户。
  • 抱歉给您带来了困惑。因为对于 12-02-2014,下一个季度是 2015 年 1 月到 3 月,季度的最后一天应该是 2015 年 3 月 31 日。所以不管是哪一天,只取决于月份。另一个例子是,对于 08-04-2014,由于当前季度是从 2014 年 7 月到 2014 年 9 月,所以下一季度将是 2014 年 0 月至 2014 年 12 月。所以下一季度的最后一天将是 12 月 31 日, 2014. 这有意义吗?

标签: c#


【解决方案1】:

很简单:

var given = new DateTime(2014, 02, 12);

var result =
    given.Date
        .AddDays(1 - given.Day)
        .AddMonths(3 - (given.Month - 1) % 3)
        .AddDays(-1);

//2014-03-31

如果我输入2014-08-12,我会得到2014-09-30

以下是今年每个月初的结果:

这是你想要的吗?

【讨论】:

  • 不是积极的,但我认为用户要求您提供季度之后的季度。例如... 12 月的日期会产生 3 月 31 日的结果。
  • @deepee1 - 这个问题有点令人困惑,但我选择了 OP 提供的示例日期,而不是问题的措辞。如果是实际的下一个季度,则需要将第一个3 替换为6
  • 100% 同意这个问题的模棱两可。无论哪种情况,方法都是合理的。
  • 感谢您的回复!并为混乱感到抱歉。我认为 deeppee1 代表了我的意思。!非常感谢您的帮助!
  • 如果你输入“2021-03-31”这个算法返回“2021-03-30”
【解决方案2】:

小心这段代码!例如日期 31.01.2018 将返回 30.03.2018。这将按预期工作:

var given = new DateTime(2018, 01, 31);    
var result =
        given.Date
            .AddMonths(3 - (given.Month - 1) % 3);
    result = result.AddDays(-result.Day);
//2018-03-31

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多