在计划的备份情况下,我们如何在C#中获得下个月的日期

时间:2019-04-18 11:14:48

标签: c# datetime

我正在尝试创建每月备份设置。因此,如果某人安排了某个特定日期,那么它应该在同一日期每月执行一次。

如果我计划在2018年12月31日进行备份,则希望在每月的同一日期执行备份。 1月将获得31,它将执行,但2月我们能做什么,它抛出异常,因为本月不存在31。 接下来的几个月我们还能做什么?我们如何获得下一个备份日期?

我尝试使用DateTime.Day属性先获取计划的备份日期,然后获取该月的当前日期,并比较当前日期是否大于已计划的日期,然后在当日添加一个月这将是下一个备份月,否则下一个备份将在当月进行。

DateTime scheduledDate = new DateTime(2019,1,31);
DateTime currentDate = DateTime.Now;

NextBackupdate  = currentDate;

int scDay = scheduledDate.Day;
int cDay = currentDate.Day;

if(cDay > scDay)
{
    NextBackupdate = NextBackupdate.AddMonths(1);
}

在这种情况下,我们可以得到下个月,但是我们如何得到一天。

3 个答案:

答案 0 :(得分:0)

获取从原始日期到当前日期的月份,并将其用于AddMonths()

DateTime scheduledDate = new DateTime(2019, 1, 31);
int months = ((DateTime.Now.Year - scheduledDate.Year) * 12) + DateTime.Now.Month - scheduledDate.Month;

DateTime nextbackupDate = scheduledDate.AddMonths(months);
Console.WriteLine(nextbackupDate.ToString());

答案 1 :(得分:0)

您可能会发现使用几种扩展方法(或基础代码)有助于获取给定DateTime的最后一天。注意DaysInMonth方法:

/// <summary>
/// Get last day of month based on date
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static DateTime LastDayOfMonth(this DateTime value)
{
    return new DateTime(value.Year, value.Month, DateTime.DaysInMonth(value.Year, value.Month));
}

/// <summary>
/// Get the first day of month based on date
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static DateTime FirstDayOfMonth(this DateTime value)
{
    return new DateTime(value.Year, value.Month, 1);
}

因此,如果要获取下一个月的最后一天,您可以简单地写

NextBackupdate.FirstDayOfMonth().AddMonths(1).LastDayOfMonth();

请确保您只有在工作日> 28时才这样做。

答案 2 :(得分:0)

您可以在每个月的最后一天执行bukcup,我认为这更有意义,因为在2月您将遇到29、30和31的问题。

看一个例子,获取当前月份的最后一天

        var actualMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
        var nextMonth = actualMonth.AddMonths(1);
        var lastDayOfMonth = nextMonth.AddDays(-1);