powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сгенерить начало и конец месяца на заданном промежутке дат
24 сообщений из 24, страница 1 из 1
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855629
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,

Мне нужно в цикле создать начало и конец месяца в следующем формате:
Код: c#
1.
2.
var startDate = new DateTime(2019, 2, 1, 0, 0, 0);
var endDate = new DateTime(2019, 2, 28, 23, 59, 59);



Допустим задаются даты: 1 мая 2015 года и 1 августа 2019 года, нужно получить все начала и концы месяцев с начальной даты и до конечной даты:
Код: c#
1.
2.
3.
4.
5.
var startDate = new DateTime(2015, 5, 1, 0, 0, 0);
var endDate = new DateTime(2015, 5, 31, 23, 59, 59);
...
var startDate = new DateTime(2019, 7, 1, 0, 0, 0);
var endDate = new DateTime(2019, 7, 31, 23, 59, 59);



Нужно учитывать и високосные года, где в феврале 29 дней.

Спасибо.
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855630
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Берешь начало следующего месяца и вычитаешь одну секунду, или одну миллисекунду, как нравится.

Это ответ на твой вопрос. Только это плохой подход в принципе для интервалов дат.
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855631
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProБерешь начало следующего месяца и вычитаешь одну секунду, или одну миллисекунду, как нравится.

Это ответ на твой вопрос. Только это плохой подход в принципе для интервалов дат.

А чем он плох?

А как мне сгенерить начала месяца?

Забыл сказать, что не нужно на c#
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855635
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mА чем он плох?тем, что если ты берешь два интервала
2015-03-01 00:00:00 - 2015-03-31 23:59:59
2015-04-01 00:00:00 - 2015-04-30 23:59:59

то интервал
2015-03-31 23:59:59 - 2015-04-01 00:00:00
у тебя останется неучтенным. Если будешь считать деньги - поплывут копейки. Если будешь смотреть логи - пропустишь некоторые события - ну и т.п.
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855637
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mА как мне сгенерить начала месяца?у тебя ведь уже есть начальная дата, дальше .AddMonth()
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855639
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mне нужно на c#а на чем?
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855651
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProRoust_mне нужно на c#а на чем?

Пардон, опечатка, хотел написать: " М не нужно на с#"
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855653
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProRoust_mА чем он плох?тем, что если ты берешь два интервала
2015-03-01 00:00:00 - 2015-03-31 23:59:59
2015-04-01 00:00:00 - 2015-04-30 23:59:59

то интервал
2015-03-31 23:59:59 - 2015-04-01 00:00:00
у тебя останется неучтенным. Если будешь считать деньги - поплывут копейки. Если будешь смотреть логи - пропустишь некоторые события - ну и т.п.

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

А какие интервалы тогда лучше? Что-то вроде:
2015-03-01 00:00:00 - 2015-04-01 00:00:00 ?
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855668
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mА какие интервалы тогда лучше? Что-то вроде:
2015-03-01 00:00:00 - 2015-04-01 00:00:00 ?да.
А использование типа такого
Код: sql
1.
where myDate >= startDate and myDate < endDate
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855671
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mНачальник говорит, что его устраивает такой конец месяца, наверное потому, что в полночь у них в бухгалтерии никто не работает, хотя в конец финансового года может быть все.ага, а потом повесят какой-нибудь обработчик, который будет автоматически обрабатывать данные по вечерам... не надо себе сразу проблемы закладывать
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855676
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public IEnumerable<(DateTime start, DateTime end)>(DateTime start, DateTime end)
{
    if(start.Day > 1) 
      throw new ArgumentException(nameof(start), "Нужно передавать 1 число в начале периода.");
    while(start < end)
    {
        var next = start.AddMonth(1);
        yield return (start, next.AddSecond(-1));
        start = next;
    }
}
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855677
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по алгоритму Shocker.Pro :)
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855680
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин название функции не указал

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public IEnumerable<(DateTime start, DateTime end)> GetDatePeriods(DateTime start, DateTime end)
{
    if(start.Day > 1) 
      throw new ArgumentException(nameof(start), "Нужно передавать 1 число в начале периода.");
    while(start < end)
    {
        var next = start.AddMonth(1);
        yield return (start, next.AddSecond(-1));
        start = next;
    }
}
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855867
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
hVosttблин название функции не указал

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public IEnumerable<(DateTime start, DateTime end)> GetDatePeriods(DateTime start, DateTime end)
{
    if(start.Day > 1) 
      throw new ArgumentException(nameof(start), "Нужно передавать 1 число в начале периода.");
    while(start < end)
    {
        var next = start.AddMonth(1);
        yield return (start, next.AddSecond(-1));
        start = next;
    }
}


Мощно
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855873
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Примерно так

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
static void Main(string[] args)
        {
            //DateTime dnow = DateTime.Now;
            DateTime dnow = new DateTime(2019, 02, 28);
            Console.WriteLine(First(dnow));
            Console.WriteLine(Last(dnow));

            Console.ReadLine();

            
        }
        public static DateTime First(DateTime dt)
        {
            return new DateTime(dt.Year, dt.Month, 1);
        }

        public static  DateTime Last(DateTime dt)
        {
            return First(dt.AddMonths(1)).AddTicks(-1);
        }
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855876
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Shocker.ProА использование типа такого
Код: sql
1.
where myDate >= startDate and myDate < endDate


Это в SQL-запросе?
если надо включить весь последний день, то в MS Sql
Код: c#
1.
where myDate between startDate and endDate



Код: c#
1.
where myDate>= startDate and myDate < endDate

[/SRC] исключает последний день
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855891
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Это в SQL-запросе?
если надо включить весь последний день, то в MS Sql
Код: c#
1.
where myDate between startDate and endDate



Это если myDate типа date, а не datetime (во многих случаях прикладных задач тип date предпочтительней типа datetime).
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855898
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Это в SQL-запросе?это псевдокод
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39855902
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2если надо включить весь последний день, то в MS Sql
Код: c#
1.
where myDate between startDate and endDate




Код: c#
1.
where myDate>= startDate and myDate < endDate


[/SRC] исключает последний денькак выше сказали - это только для типа date и при условии, что в endDate у тебя последний день предыдущего месяца, я же говорил про первый день следующего - читай внимательно.
Мой вариант адекватно сработает и с datetime и с date, а between - нет
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39856148
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Shocker.ProА использование типа такого
Код: sql
1.
where myDate >= startDate and myDate < endDate


Это в SQL-запросе?
если надо включить весь последний день, то в MS Sql
Код: c#
1.
where myDate between startDate and endDate



Код: c#
1.
where myDate>= startDate and myDate < endDate

[/SRC] исключает последний день
Нет, надо готовые даты передать в модуль, который тащит данные (не из SQL) и потом либо экспортирует в Эксель, либо сразу пишет в базу.
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39856149
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProRoust_mА какие интервалы тогда лучше? Что-то вроде:
2015-03-01 00:00:00 - 2015-04-01 00:00:00 ?да.
А использование типа такого
Код: sql
1.
where myDate >= startDate and myDate < endDate


Эти две даты передаются с модуль, который я не контролирую. Что он там делает и использует ли '<' или '<=' я не знаю.

То есть теоретически, если транзакция произошла ровно в полночь, то при использовании такого интервала она может посчитаться и в двух месяцах.

Надо выяснить как этот модуль даты включает (или не включает) в интервал.
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39856160
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mЭти две даты передаются с модуль, который я не контролирую.
И документация отсутсвует
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39856182
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилRoust_mЭти две даты передаются с модуль, который я не контролирую.
И документация отсутсвует
Скажем так, она присутствует, но не очень подробна.
...
Рейтинг: 0 / 0
Как сгенерить начало и конец месяца на заданном промежутке дат
    #39856189
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mСкажем так, она присутствует, но не очень подробна.

Стоило бы начать с выяснения точных требований и точного бизнес-смысла, и уже потом переходить к подробностям реализации.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сгенерить начало и конец месяца на заданном промежутке дат
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]