C#加上或减去确切的天数

时间:2017-09-02 10:09:44

标签: c# oop datetime c#-4.0

将有2个切换按钮。一个将打开,另一个将打开 查询是当前月份是30天,那么它应该显示2017年8月1日至2017年8月16日,当我切换它应该显示8月16日至8月30日,类似的应该工作切换。 但是,如果当前月份是31天,那么它应该显示2017年8月1日至2017年8月16日以及8月16日至8月31日,类似的应该切换下来。如果我试图切换它应该继续工作它应该如下所示 1月1日至15日,1月16日至30日,2月1日至2月16日,它应该继续上下切换。 我试过的代码如下:

public static DateTime GetEndDate(int year, int month)
{
    decimal currentmonth = System.DateTime.DaysInMonth(year, month);
    decimal value = Math.Ceiling(Convert.ToDecimal(currentmonth / 2));
    // DateTime updatedfinaldatevaluestart = new DateTime(year, month, day);
    DateTime updatedfinaldatevalueend = new DateTime(year, month, Convert.ToInt32(value));
    return updatedfinaldatevalueend;
}

public static DateTime GetStartDate(int year, int month)
{
    decimal currentmonth = System.DateTime.DaysInMonth(year, month);
    decimal value = Math.Ceiling(Convert.ToDecimal(currentmonth / 2));
    // DateTime updatedfinaldatevaluestart = new DateTime(year, month, day);
    DateTime updatedfinaldatevalueend = new DateTime(year, month, 01);
    return updatedfinaldatevalueend;
}

2 个答案:

答案 0 :(得分:1)

您不必进行所有这些计算。所有月份的上半部分总是在1日到15日之间(你不必计算15日。没有一个月有45天)。并且,下半部分将始终从16日开始,您可以通过执行此操作来获取月份的结束日期(startDate是该月的第一天):

var endDate = startDate.AddMonths(1).AddDays(-1); 

答案 1 :(得分:0)

我怀疑有更好的方法来做你想要实现的目标,但问题中没有足够的信息来确定那是什么(调用这些方法是什么,发生了什么输出等)但是,使用您发布的方法,此(未经测试的)代码可能会执行您需要的操作

单击向下按钮时bool参数应为true,单击向上按钮时为false

    public static DateTime GetEndDate(int year, int month, bool firstHalfOfMonth)
    {
        if (firstHalfOfMonth == false)
        {
            return GetStartDate(year, month, false);
        }
        else
        {
            return new DateTime(year, month, System.DateTime.DaysInMonth(year, month));
        }
    }

    public static DateTime GetStartDate(int year, int month, bool firstHalfOfMonth)
    {
        if (firstHalfOfMonth == false)
        {
            int daysInCurrentMonth = System.DateTime.DaysInMonth(year, month);
            int midMonth = Convert.ToInt32(Math.Ceiling((double)daysInCurrentMonth / 2));
            return new DateTime(year, month, midMonth);
        }
        else
        {
            return new DateTime(year, month, 1);
        }
    }