Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 26.02.2016
Сообщений: 10
.NET 4.x

7+7 календарных дней

01.09.2016, 16:54. Показов 1125. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Подскажите, пожалуйста, как реализовать такое вот условие:
есть поле в форме, в котором указывается дата (например: Data)

нужно получить конечную дату - DataResult, для этого взять дату из Data и к ней прибавить 7 календарных дней.

Так же необходимо провести проверку на то, что DataResult не выпала на праздник(и), если DataResult выпадает на праздник(и), то необходимо проверить, сколько дней из 7 календарных выпадают на праздничные и прибавить то количество дней к DataResult
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.09.2016, 16:54
Ответы с готовыми решениями:

Определить среднюю температуру тех дней, которые предшествуют первому из самых холодных дней
Пусть в массиве содержатся результаты измерений температуры воздуха, которые проводились ежедневно в течении декабря месяца. Определить...

Нахождение дней между диапазоном дат(не кол-во дней, а сами дни)
Всем привет, возникла такая задачка: есть начальная и конечная даты, нужно найти дни между ними, не само кол-во дней, а именно сами дни,...

выборка и расчет календарных дней.
Доброго времени суток.Совсем недавно взялся за access2k7(ранее не занимался им вообще) просто для общего развития,но чтобы быстрее научится...

4
 Аватар для Tsin
1180 / 488 / 188
Регистрация: 30.12.2012
Сообщений: 1,278
Записей в блоге: 2
01.09.2016, 17:15
Viktor-78, вам нужно как-то определить какой день считается праздничным. Если вы имеете в виду выходные, то тут все просто. Иначе ручками писать придется список праздников и методы определяющие, является ли день праздничным.

C#
1
2
3
4
5
6
7
8
DateTime beginTime = DateTime.Parse(Data.text); // тут примерно
DateTime dataResult = beginTime.AddDays(7);
 
DayOfWeek endDay = dataResult.DayOfWeek;
if (endDay == DayOfWeek.Saturday)
    dataResult.AddDays(3); //прошлая суббота, текущая сб. и вс.
else if (endDay == DayOfWeek.Sunday)
    dataResult.AddDays(2); //прошлое вс. и текущее вс.
1
0 / 0 / 0
Регистрация: 26.02.2016
Сообщений: 10
01.09.2016, 17:56  [ТС]
по поводу праздничных дней - это ориентируясь на производственный календарь
0
 Аватар для Tsin
1180 / 488 / 188
Регистрация: 30.12.2012
Сообщений: 1,278
Записей в блоге: 2
02.09.2016, 08:20
Viktor-78, у вас есть этот календарь в каком-нибудь удобоваримом формате? excel, doc, xml, csv..?

Если нет, то самая сложная задача - добыть его в таком виде для работы в программе.
0
 Аватар для Tsin
1180 / 488 / 188
Регистрация: 30.12.2012
Сообщений: 1,278
Записей в блоге: 2
02.09.2016, 10:21
Набросал способ решения вашей задачи. Данные для производственного календаря стянул с некоего сайта КонсультантПлюс, там за 2016 и 2017 года есть. Использовал HtmlAgilityPack.

Кода по большому счету избыточно для решения задачи, просто меня понесло немного
Суть проста: тянем данные по URL,
заполняем объекты типов DayInfo, MonthInfo, YearInfo
дергаем метод YearInfo.GetDaysBetween(DateTime start, DateTime end);

Получаем на выходе набор дней, в которых помимо DateTime содержится метка, является ли день выходным или рабочим. Осталось посчитать сколько дней выходных и прибавить к начальной дате.

Если лень качать проект, то код ниже под спойлерами.
DayType и DayInfo, MonthInfo, YearInfo
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
enum DayType
{
    WorkingDay,
    Weekend,
}
 
struct DayInfo
{
    public DateTime DateTime { get; set; }
    public DayOfWeek DateOfWeek { get { return DateTime.DayOfWeek; } }
    public DayType DayType { get; set; }
}
 
class MonthInfo
{
    public string Name { get; set; }
    public int DaysCount { get { return Days.Count; }}
    public List<DayInfo> Days { get; set; }
    public IEnumerable<DayInfo> Holidays { get { return Days.Where(x => x.DayType == DayType.Weekend); } }
 
    //ctor
    public MonthInfo()
    {
        Days = new List<DayInfo>();
    }
}
 
class YearInfo
{
    public List<MonthInfo> Monthes { get; set; }
    public IEnumerable<DayInfo> Days { get { return Monthes.SelectMany(x => x.Days); } }
 
    //ctor
    public YearInfo()
    {
        Monthes = new List<MonthInfo>();
    }
 
    public IEnumerable<DayInfo> GetDaysBetween(DateTime startDate, DateTime endDate)
    {
        var result = Days.Where(x => x.DateTime >= startDate && x.DateTime <= endDate);
        return result;
    }
}

Парсер ресурса
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
static class WeekendManager
{
    public static YearInfo GetYearInfoFrom(int year, string url)
    {
        YearInfo result = new YearInfo();
 
        HtmlWeb web = new HtmlWeb();
        HtmlDocument doc = web.Load(url);
 
        var monthes = doc.DocumentNode.SelectNodes("//td")
            .Where(x => x.GetAttributeValue("class", "none") == "month-block");
 
        foreach (var month in monthes)
        {
            MonthInfo mInfo = new MonthInfo();
 
            //month name
            string monthName = month.SelectSingleNode("table/thead/tr/th").InnerText;
            mInfo.Name = monthName.ToLower();
 
            //days
            DayInfo dInfo = new DayInfo();
 
            var days = month.SelectNodes("table/tbody/tr/td")
                .Where(x => x.GetAttributeValue("class", "none") != "inactively");
 
            foreach (var day in days)
            {
                dInfo.DateTime = new DateTime(
                    year,
                    _md[monthName.ToLower()],
                    int.Parse(day.InnerText.TrimEnd('*'))
                    );
 
                dInfo.DayType = ResolveDayType(day.GetAttributeValue("class", "none"));
 
                mInfo.Days.Add(dInfo);
            }
 
            result.Monthes.Add(mInfo);
        }
 
        return result;
    }
 
    private static DayType ResolveDayType(string htmlDayType)
    {
        switch (htmlDayType)
        {
            case "work":
                return DayType.WorkingDay;
            case "preholiday":
                return DayType.WorkingDay;
            case "weekend":
                return DayType.Weekend;
            case "holiday weekend":
                return DayType.Weekend;
            default:
                throw new ArgumentException("smth goes wrong", htmlDayType);
        }
    }
 
    private static Dictionary<string, int> _md = new Dictionary<string, int>()
    {
        { "декабрь",  12 },
        { "январь",   1 },
        { "февраль",  2 },
 
        { "март",     3 },
        { "апрель",   4 },
        { "май",      5 },
 
        { "июнь",     6 },
        { "июль",     7 },
        { "август",   8 },
 
        { "сентябрь", 9 },
        { "октябрь",  10 },
        { "ноябрь",   11 },
    };
}

Пример использования
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Program
{
    static void Main(string[] args)
    {
        var w2016 = WeekendManager.GetYearInfoFrom(2016, "http://www.consultant.ru/law/ref/calendar/proizvodstvennye/");
        //var w2017 = WeekendManager.GetYearInfoFrom(2017, "https://www.consultant.ru/law/ref/calendar/proizvodstvennye/2017/");
 
        DateTime beginTime = DateTime.Parse("03.09.2016");
        DateTime dataResult = beginTime.AddDays(7);
 
        var test = w2016.GetDaysBetween(beginTime, dataResult);
        Console.WriteLine(test.Count(x => x.DayType == DayType.Weekend));
    }
}
Вложения
Тип файла: zip WorkingDayAssistant.zip (1.81 Мб, 6 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.09.2016, 10:21
Помогаю со студенческими работами здесь

Определение количества календарных дней с разбиением на 30, 31, 28 и 29
Доброго времени суток! Ребят, требуется помощь. Имеется 2 дататаймпикера и кнопка. Соответственно, после нажатия кнопки, необходимо...

Подсчитать количество календарных дней по неиспользованным отпускам поквартально
данный файл считает количество календарных дней по неиспользованным отпускам поквартально Sub smena_goda() 'текущий год +1 - меняет...

Вывести число дней в заданном году, учитывая, что обычный год насчитывает 365 дней, а високосный — 366 дней
11 Дан номер некоторого года (положительное целое число). Вывести число дней в этом году, учитывая, что обычный год насчитывает 365 дней, а...

Вывести число дней в этом году, учитывая, что обычный год насчитывает 365 дней, а високосный — 366 дней
Дан номер некоторого года (положительное целое число). Вывести число дней в этом году, учитывая, что обычный год насчитывает 365 дней, а...

Преобразование календарных дат в текст
Бодрого времени суток, вам!) Собственно мне необходим код программы, которая бы преобразовывала календарные даты вроде 01.01.2011 в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru