【问题标题】:Quarter End Date季度结束日期
【发布时间】:2018-06-01 00:07:34
【问题描述】:

对于我来说,根据我所在的月份来分配我的季度末月最简单的方法是什么?

有什么东西我可以像模数一样使用吗?我想要最简单的情况和最少的代码行数

我的季度结束月份是 3、6、9 和 12 个月。

我想避免做这样的逻辑:

if (1 <= mymonth && mymonth <= 3)
    mymonth = new DateTime(DateTime.Now.Year, 3, 15);
else if (4 <= mymonth && mymonth <= 6)
    mymonth = new DateTime(DateTime.Now.Year, 6, 15);
else if (7 <= mymonth && mymonth <= 9)
    mymonth = new DateTime(DateTime.Now.Year, 9, 15);
else
    mymonth = new DateTime(DateTime.Now.Year, 12, 15);

【问题讨论】:

标签: c# datetime modulo


【解决方案1】:

这个怎么样?

public DateTime GetQuarterEnd(int month)
{
    if (month < 1 || month > 12)
        throw new ArgumentException("month is not a valid Month of the year.");

    var mod = month % 3;
    var actual = month / 3 + (mod > 0 ? 1 : 0);
    return new DateTime(DateTime.Now.Year, actual * 3, 15);
}

【讨论】:

    【解决方案2】:

    你可以使用:

    var quarterEndMonth = 3 * Math.Ceiling((double)currentMonth / 3);
    

    Demonstration

    【讨论】:

      【解决方案3】:

      最少的行数可能是这样的:

      var d = new DateTime(DateTime.Now.Year, 3*(1+(mymonth-1)/3), 15);
      

      但这太丑了:)

      https://dotnetfiddle.net/HZfFLF

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-27
        • 1970-01-01
        • 2021-07-21
        • 1970-01-01
        • 2021-03-03
        • 2014-02-06
        相关资源
        最近更新 更多