Конец вычислений месяца

Эта проблема отслеживает интерес к реализации пользовательских сообщений об ошибках с использованием механизма .because().

Тем временем, avrelian создал симпатичную библиотеку, которая реализует пользовательские сообщения об ошибках, используя механизм since() - jasmine-custom-message .

15
задан vdh_ant 11 June 2009 в 02:00
поделиться

9 ответов

Чтобы проверить, является ли дата концом месяца, вы проверяете, является ли следующий день первым днем ​​какого-либо месяца. ваш алгоритм должен быть таким: «Если день не является концом месяца, добавьте 1 месяц. Если это конец месяца, добавьте один день, добавьте один месяц, вычтите один день».

    bool IsEndOfMonth(DateTime date) {
        return date.AddDays(1).Day == 1;
    }
    DateTime AddMonthSpecial(DateTime date) {
        if (IsEndOfMonth(date))
            return date.AddDays(1).AddMonths(1).AddDays(-1);
        else
            return date.AddMonths(1);
    }
34
ответ дан 1 December 2019 в 01:24
поделиться

Можете ли вы попасть туда, начав с первого дня предыдущего месяца и вернувшись на один день назад?

1
ответ дан 1 December 2019 в 01:24
поделиться
DateTime exampleDate = DateTime.Parse("12/31/2009");
bool isLastDayOfMonth = (exampleDate.AddDays(1).Month != exampleDate.Month);

if (isLastDayOfMonth)
    Console.WriteLine(exampleDate.AddDays(1).AddMonths(1).AddDays(-1));
else
    Console.WriteLine(new DateTime(exampleDate.Year, exampleDate.Month, 1).AddMonths(2).AddDays(-1));

РЕДАКТИРОВАТЬ: Я снова прочитал ваш вопрос. Вам нужно будет поставить чек, чтобы узнать, не наступил ли последний день месяца.

Извините, мне жаль, что я четко не прочитал вопрос о том, что требуется.
Надеюсь, этого достаточно, чтобы дать вам представление о том, что вам нужно.

2
ответ дан 1 December 2019 в 01:24
поделиться

Вот простое решение .NET C #, которое учитывает високосные годы и т. Д .:

static DateTime ContractDue(DateTime start, int months)
{
     if (start.Month == start.AddDays(1).Month)
     { // Same month, just add the months
            return start.AddMonths(months);
     }
     // Last day of month... add a day, add the months, then go back one day
     return start.AddDays(1).AddMonths(months).AddDays(-1);
}
0
ответ дан 1 December 2019 в 01:24
поделиться

Мой подход к этой проблеме начнется с процедуры, которая определяет, является ли данный день последним днем ​​месяца ( учитывая, конечно, февраль високосного года!)

Вам также понадобится процедура, которая дает вам последний день месяца, учитывая день в этом месяце.

Затем, если вы встретите день, который ЯВЛЯЕТСЯ последний день, добавьте один день и используйте вторую процедуру, чтобы получить последний день ЭТОГО месяца. Используйте цикл на несколько месяцев.

0
ответ дан 1 December 2019 в 01:24
поделиться

Вы могли бы реализовать EndOfMonth () и isEndOfMonth ().

так что ваш код будет, более или менее,

if isEndOfMonth( this.Date() )
  endDate = (startmonth + addedMonths).EndOfMonth()
else
  endDate = startDate + addedMonths

немного упрощенным, но вы поняли идею.

Здесь, конечно, есть много идей для логики EndOFMonth и isEndOfMonth

0
ответ дан 1 December 2019 в 01:24
поделиться

Если вам нужен только EndOfMonth или простой AddNMonth, то вы уже получили свой ответ.

В противном случае, чтобы иметь полное универсальное решение, вам потребуется реализация шаблона повторения, как вы можете см. его в пользовательском интерфейсе интерфейса собрания Outlook . Я не предлагаю вам использовать реализацию Outlook, но должно быть несколько компонентов .NET, которые вы можете купить. Или реализуйте его самостоятельно, но не недооценивайте и не тестируйте все модули - это очень сложный компонент для реализации.

-1
ответ дан 1 December 2019 в 01:24
поделиться

Вы можете использовать метод DateTime.DaysInMonth () примерно так:

DateTime workingMonth = new DateTime(2009, 06, 30).AddDays(1);
int nextMonthDays = DateTime.DaysInMonth(workingMonth.Year, workingMonth.Month);
DateTime newMonth = new DateTime(workingMonth.Year, workingMonth.Month, nextMonthDays);
0
ответ дан 1 December 2019 в 01:24
поделиться
  1. Проверить, является ли старая дата «концом месяца».
    1. Добавьте день к дате и посмотрите, изменится ли номер месяца.
  2. Добавьте месяц
  3. Если старая дата была «концом месяца»
    1. Установите день месяца на 1
    2. Добавьте еще месяц
    3. Вычтите один день
0
ответ дан 1 December 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: