C#中的半月日期​​计算

时间:2015-02-09 11:54:20

标签: c# datetime

我正在尝试使用"半月"进行日期计算。半月多少天? AddMonths(0.5)不起作用:)

Console.WriteLine("SemiMonthly : " + date.AddMonths(0.5)); //This does not work

5 个答案:

答案 0 :(得分:3)

我想根据这个月增加一半月意味着你可以这样做:

public static DateTime AddHalfMonth(DateTime dt, MidpointRounding rounding)
{
    int daysInMonth = System.DateTime.DaysInMonth(dt.Year, dt.Month);
    if(daysInMonth % 2 == 0)
        return dt.AddDays(daysInMonth / 2);
    else if(rounding == MidpointRounding.ToEven)
        return dt.AddDays(daysInMonth / 2);
    else
        return dt.AddDays((daysInMonth + 1) / 2);
}

您可以这样使用它:

DateTime inHalfMonth = AddHalfMonth(date, MidpointRounding.ToEven);

答案 1 :(得分:3)

如果您愿意,可以通过以下方式添加当月的半天:

DateTime a = new DateTime();
a.AddDays(DateTime.DaysInMonth(a.Year, a.Month)/2);

答案 2 :(得分:1)

您必须明确定义什么"半月"意味着,在这样做的过程中,您将回答自己的问题。

为简单起见,我建议你只使用每个月的第一天和第十五天。

答案 3 :(得分:0)

你需要为此定义自己的约定 - 没有“半月”的规范概念。

答案 4 :(得分:0)

借用蒂姆答案中的一些概念,但附加逻辑允许时间表永远不会偏离半个月的标记。我注意到如果我从1月16日开始以递归方式运行该函数,那么第24项将于12月20日结束。我简化了这个功能并使其成为一个扩展。

{{1}}