Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2009, 16:38   #1
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию обработка даты

собственно проблемка примерно такая
(с++ консоль)
нужно прибавить к данной дате Х дней, притом так что бы получилась правильное число правильного месяца
например дано 25.10.09 прибавляем 7 дней и получаем 01.11.09

+ еще нужна возможность сравнить текущую дату с другой, включая понятия больше/меньше

скурил описание time.h , но как я понял там только форматирование для вывода и все это в строках или символах

короче говоря как сравнивать даты, как увеличить значение, в чем хранить?


хотелось бы простой пример, ну или хотя бы ссылки где почитать про это дело
m0nax вне форума Ответить с цитированием
Старый 22.10.2009, 16:49   #2
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

ну можно пойти тупо в лоб....
часы минуты секунды с ними проблем возникнуть не должно... а дальше "геморно" считаем месяца и года....
dampirik вне форума Ответить с цитированием
Старый 22.10.2009, 16:51   #3
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Хранить для даты я бы советовал 3 значения - год, месяц и день. Завести дополнительный массив на длины месяцев (вписать заранее). В самом простом варианте все делается через циклический инкреминг: увеличиваем определенное число раз день, когда текущий день больше размера данного месяца - увеличиваем месяц, день становится 1ым. Когда закончился 12ый месяц - увеличиваем год. Отдельно прописать для высокосных годов лишний день, а так никаких трудностей.
LeBron вне форума Ответить с цитированием
Старый 22.10.2009, 17:02   #4
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

хмм вроде ясно..
А эти 3 значения год/месяц/день получать из секунд которые возвращает обычный time(NULL); или попроще есть варианты?
m0nax вне форума Ответить с цитированием
Старый 22.10.2009, 17:29   #5
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

"К данной дате" - я думал, что дата уже указана на входе, иначе было бы, к примеру, "текущей дате". Если речь идет о системном времени или каком-нибудь подобном случае - тогда уже отдельным заданием становится обработка этого времени (с помощью того же time(NULL); - уходим от алгоритма, о котором спрашивалось в условии). Если же надо обрабатывать не данные системы, а запрос пользователя (пример
"10 10 2010
300"), то главное - уточнить заранее, что будет на входе. Ведь я в примере дал 3 числа готовыми, а если у нас не числа, а строки - придется использовать дополнительный алгоритм перевода.
В 2 совах - если даны месяц год день - отлично, ничего не надо придумывать, а иначе надо сначала уточнить, что дано - и потом перводить, так как надо это переводить.
Если Вам еще интересно, то даже простой алго, который я указал вначале, можно заметно "оптимизировать" таким способом - если с началом нового года остаток дней "к увеличению" больше 366 - увеличиваем год на 1 и уменьшаем остаток дней на число дней в "прошедшем" году (высокосный/обычный). Единственное неудобство в том, что при таком решении в реализации придется отказатся от фора, и делать через while.
LeBron вне форума Ответить с цитированием
Старый 22.10.2009, 17:40   #6
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

ну у меня по плану будет и "данная дата" и реальное системное время которые между собой взаимодействуют
т.е если к некой дате прибавляется Х дней, то с учетом реального календаря получается новая дата
потом по мере надобности она должна сравниваться с текущей системной датой

пока вроде разобрался что делать, осталось объяснить компилятору это ))
например получил реальную дату как 3 разных числа так:
Код:
	int day, month, year ;
	time_t rawtime;
	struct tm * timeinfo;
	char buf [10];
	
	time ( &rawtime );
	timeinfo = localtime( &rawtime );

	strftime (buf,10," %Y ",timeinfo);
	year = atoi(buf) ;
	strftime (buf,10," %m ",timeinfo);
	month = atoi(buf) ;
	strftime (buf,10," %d ",timeinfo);
	day = atoi(buf) ;

	cout << year  << endl 
		<< month << endl 
		<< day << endl ;
теперь уже можно сравнивать и увеличивать спокойно

Последний раз редактировалось m0nax; 22.10.2009 в 17:45.
m0nax вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выбор даты Screame Microsoft Office Excel 9 23.10.2009 19:30
Даты Sparky БД в Delphi 6 02.10.2009 09:48
Преобразование даты Tavrida Microsoft Office Excel 6 31.03.2009 15:41
Даты не даты Nasya Microsoft Office Excel 3 22.08.2007 20:18