Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
2 / 2 / 1
Регистрация: 29.06.2011
Сообщений: 45
1

Работа с датой

06.10.2011, 18:23. Показов 3284. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кто подскажет как можно организовать такую логику и какими методами? Проще говоря есть 3 поля День недели, Месяц и очередность т.е. типа первый вторник октября и я получаю дату в текущем году етого первого вторника октября. Больше интересует как все сформировать первый второй третий..
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2011, 18:23
Ответы с готовыми решениями:

Работа с датой в ADO/SQL/C#
Вот пишу программу на C# WinForms, БД подключаю из Access, в БД есть две таблицы: 1) Users...

Работа с датой из БД
Здравствуйте! Подскажите, пож-ста, как в ASP сравнить текущую дату с датой из БД? У меня есть БД...

Работа с датой
Нужно ввести в textBox дату в формате день.месяц.год (без времени). В дальнейшем надо работать с...

Работа с датой
std::string str = "Thu, 01-Jan-1970 00:00:01 GMT"; std::tm t_time; std::istringstream ss(str);...

6
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
06.10.2011, 18:27 2
А теперь объясни нормально. Это ты в курсе о чём ты говоришь. Я почти ничего не понял.
0
2 / 2 / 1
Регистрация: 29.06.2011
Сообщений: 45
06.10.2011, 18:49  [ТС] 3
ну а что неясно вводиш 3 параметра к примеру (первый/второй/третий/четвертый) (понедельник/вторник/среда/...) (январь/февраль/март/..) К примеру выбираю для понимания первый четверг октября и получаю текущую дату. Надеюсь так понятно.

Добавлено через 1 минуту
т.е. три выпадающих списка и заполнить поле с датой
0
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
07.10.2011, 00:10 4
Предположим, что, исходя из выбранных в контролах значений, вы уже определили какой по счету день какого месяца и года вам нужно получить.

Дальше все просто (следуя вашему примеру, найдем первый четверг октября 2011 года):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int year = 2011;  // Год
int month = 10; // Месяц
DayOfWeek day = DayOfWeek.Thursday; // День недели
int count = 1;  // Какой по счету
 
// Первый день месяца под вопросом
var startOfTheMonth = new DateTime(year, month, 1); 
 
// Для начала надо найти дату первого в месяце дня под вопросом
var firstOccurence = startOfTheMonth.AddDays(( 7 - ((int)startOfTheMonth.DayOfWeek - (int)day)) % 7);
 
// Осталось добавить необходимое количество недель с первого дня под вопросом
var answer = firsOccurence.AddDays(7 * (count -1));
 
Console.WriteLine("{0} {1} {2}-го месяца {3}-го года - {4:dd-MM-yyyy}", count, day, month, year, answer);
1
2 / 2 / 1
Регистрация: 29.06.2011
Сообщений: 45
07.10.2011, 11:13  [ТС] 5
Спасибо огромное я уже начинал высчитывать закономерности по годам, рисовать матрицы. К стати нашол закономерность что по высокосному году через 7 высокосных годов повторяется последовательность.))

Добавлено через 46 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static String GetDate(int year, int month, int count, int dayofweek)
        {
            label:
            // Первый день месяца под вопросом
            var startOfTheMonth = new DateTime(year, month, 1);                    
 
            // Для начала надо найти дату первого в месяце дня под вопросом
            var firstOccurence = startOfTheMonth.AddDays((7 - ((int)startOfTheMonth.DayOfWeek - (int)dayofweek)) % 7);
 
            // Осталось добавить необходимое количество недель с первого дня под вопросом
            var answer = firstOccurence.AddDays(7 * (count - 1));
            
            string NeedDay = answer.Day.ToString();
            string NeedMonth = answer.Month.ToString();
            string NeedYear = answer.Year.ToString();
            if (count == 5 && int.Parse(NeedDay) < 10) { count = 4; goto label; }
            string Getting = String.Format("{0}.{1}.{2}", NeedYear, NeedMonth, NeedDay);
 
            return Getting;
        }
Вот оформил в метод и немного доработал был маленький глюк когда вводится первый/второй/третий/четвертый/ и может быть(пятый)последний вот на пятом если его нету глючило
0
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
07.10.2011, 11:31 6
Странный код. Это вы проверяете чтобы пятый день не перепрыгнул на следующий месяц, меняя его на четвертый? В этом случае у вас функция возвращает не тот ответ, который ожидает пользователь - он-то думает что ему показывается дата пятого дня, а на деле - четвертого.
Если пятого дня в месяце нет, то надо выбрасывать исключение типа InvalidOperationException или ArgumentOutOfRangeException.

Проверка на перепрыгивание месяца:
C#
1
answer.Month != month
Полный код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static String GetDate(int year, int month, int count, int dayofweek)
 {
 // Первый день месяца под вопросом
 var startOfTheMonth = new DateTime(year, month, 1); 
 
 // Для начала надо найти дату первого в месяце дня под вопросом
 var firstOccurence = startOfTheMonth.AddDays((7 - ((int)startOfTheMonth.DayOfWeek - (int)dayofweek)) % 7);
 
 // Осталось добавить необходимое количество недель с первого дня под вопросом
 var answer = firstOccurence.AddDays(7 * (count - 1));
 
if (answer.Month != month)
throw new ArgumentOutOfRangeException(string.Format("There are only 4 occurences of {0} in month {1}", day, month));
 
return answer.ToString("yyyy.MM.dd");
 }
Можно так же добавить проверку на правильный диапазон значений параметров year, month и day
0
2 / 2 / 1
Регистрация: 29.06.2011
Сообщений: 45
07.10.2011, 11:51  [ТС] 7
Последнее поле выбора не пятый день а ПОСЛЕДНИЙ т.е. если есть пятый то пятый, а если нет то четвертый. Ексепшин никчему. Только недотестил с высокосным годом, но надеюсь все в порядке ))
0
07.10.2011, 11:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2011, 11:51
Помогаю со студенческими работами здесь

Работа с датой
Ребят, всем привет! Подскажите пожалуйста как работать с датами при создании следующего...

Работа с датой
Всем привет... Возник следущий вопрос. Есть текущая дата 12.07.2013 И есть дата окончания...

Работа с датой
Доброго времени суток :) у меня есть вопрос как передать текущую дату элементу дата. Я использую...

Работа с датой
Прошу помощи замучался уже изначально входные данные: 1 Дата рождения к примеру 01.01.1990 2...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru