[英]How can we get next month date in C# in scheduled backup case
我正在嘗試創建每月備份設置。 因此,如果有人安排某個特定日期,那么它應該在同一天按月執行。
如果我在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);
}
在這種情況下,我們可以在下個月獲得,但我們怎樣才能得到這一天。
獲取從原始日期到當前日期的AddMonths()
,並在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());
您可能會發現使用幾個擴展方法(或底層代碼)有助於獲取任何給定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,你只需要這樣做。
你可以在每個月的最后一天執行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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.