Как мы можем получить дату следующего месяца в C # в случае запланированного резервного копирования - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь создать настройку ежемесячного резервного копирования. Так что, если кто-то запланировал какую-то конкретную дату, то она должна выполняться ежемесячно в тот же день.

Если я запланировал резервное копирование на 31 декабря 2018 года, я хочу, чтобы оно выполнялось в одну и ту же дату каждого месяца. В январе получит 31. Это выполнено, но в феврале, что мы можем сделать, это вызывает исключение, потому что 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 голосов
/ 18 апреля 2019

Вы можете обнаружить, что использование нескольких методов расширения (или базового кода) помогает получить последний день любого заданного 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.

0 голосов
/ 18 апреля 2019

вы можете выполнять bukcup в последний день каждого месяца, я думаю, что это более разумно, потому что в феврале у вас будут проблемы с 29, 30 и 31.

Посмотрите здесь один пример, чтобы получить последний день текущего месяца

        var actualMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
        var nextMonth = actualMonth.AddMonths(1);
        var lastDayOfMonth = nextMonth.AddDays(-1);
0 голосов
/ 18 апреля 2019

Получить месяцы от первоначальной даты до текущей даты и использовать их в 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...