| 
			| 
					
						| First_MC 
								Гость
 | 
								|  | «  : 25-12-2007 23:20 »  |  | 
 
 Только учусь программировать... Столкнулся с ситуацией,что дали задание на лабу надо сдать,но как не знаю,лектор заболел и не хрена нам не расказал по теме,можете помочь написать!!Просто сессия подпирает(((Буду очень благодарен
 В массиве, содержащем случайные значения даты и времени в формате ГГ-ММ-ДД ЧЧ:ММ:СС заменить их на значения в формате временной метки Unix. Функции обработки строк не использовать.
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  | 
	| 
			| 
					
						| First_MC 
								Гость
 | 
								|  | « Ответ #2 : 26-12-2007 09:30 »  |  | 
 
 А можно можете именно с кодом помочь,я просто не пойму как эти функции работают
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  | 
	| 
			| 
					
						| First_MC 
								Гость
 | 
								|  | « Ответ #4 : 26-12-2007 20:58 »  |  | 
 
 Все спасип,уже все сам написал))) |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #5 : 26-12-2007 21:02 »  |  | 
 
 Все спасип,уже все сам написал)))
 и... шепотом, код в студию |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| First_MC 
								Гость
 | 
								|  | « Ответ #6 : 26-12-2007 21:10 »  |  | 
 
 #include<iostream>using namespace std;
 #include<conio.h>
 
 int unixtime(int god,int mes,int den, int chas, int min, int sek)
 {
 
 const int nvg=31449600;
 const int vg=31536000;
 const int denn=86400;
 int g,gost;
 if(god<1970 || mes<=0 || mes>12 || den<=0 || den>31 || chas<0 || chas>24 || min<0 || min>60 || sek<0 || sek>60)
 return -59870;
 else
 {
 gost=(god-1970)%4;
 g=(god-1970)-gost;
 g=nvg*(g-g/4)+(vg*g/4)+(gost*nvg);
 switch(mes)
 {
 case 12: g+=(31*denn);
 case 11: g+=(30*denn);
 case 10: g+=(31*denn);
 case 9: g+=(30*denn);
 case 8: g+=(31*denn);
 case 7: g+=(31*denn);
 case 6: g+=(30*denn);
 case 5: g+=(31*denn);
 case 4: g+=(30*denn);
 case 3: g+=(31*denn);
 case 2:
 if(gost==0)
 g+=(29*denn);
 else
 g+=(28*denn);
 case 1: g+=(31*denn);
 }
 g+=(chas*3600)+(min*60);
 return g;
 }
 }
 
 void main()
 {
 int god,mes,den,chas,min,sek;
 int newtime,g;
 setlocale(LC_ALL,"rus");
 cout<<"Введите год";
 cin>>god;
 cout<<"Введите месяц";
 cin>>mes;
 cout<<"Введите день";
 cin>>den;
 cout<<"Введите час";
 cin>>chas;
 cout<<"Введите минуты";
 cin>>min;
 cout<<"Введите секунды";
 cin>>sek;
 g=unixtime(god,mes,den,chas,min,sek);
 if(g<0)
 cout<<"Error";
 else
 cout<<g;
 _getch();
 }
 
Может кто то посоветует,что то исправить для корректировки вывода результата на экран. Выше описанные функции не использовал,т.к. не понял их применение. :)Но все равно всем спасибо кто хоть говорил какие либо напутственные слова )   |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #7 : 26-12-2007 21:18 »  |  | 
 
 не совсем справился с заданием   дата и время в формате ГГ-ММ-ДД ЧЧ:ММ:СС |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| First_MC 
								Гость
 | 
								|  | « Ответ #8 : 26-12-2007 21:20 »  |  | 
 
 Ну так что нужно исправить или переделать? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #9 : 26-12-2007 21:26 »  |  | 
 
 на мой взгляд, в функцию unixtime, нужно передавать два параметра: (строковую дату и формат даты)Вот представь, что завтра поменяется формат ГГММДДЧЧММСС
 Естествено все форматы не предусмотришь, но убьешь еще одного зайца, например, хм....
 
 Функции обработки строк не использовать - а это как?
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| First_MC 
								Гость
 | 
								|  | « Ответ #10 : 26-12-2007 21:30 »  |  | 
 
 Ну напиши часть кода там де ты думаешь что надо именно с функциями обработки строк  |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| First_MC 
								Гость
 | 
								|  | « Ответ #11 : 26-12-2007 21:32 »  |  | 
 
 на мой взгляд, в функцию unixtime, нужно передавать два параметра: (строковую дату и формат даты)Вот представь, что завтра поменяется формат ГГММДДЧЧММСС
 
 Лишнее убитое время)Кому оно надо))) |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #12 : 26-12-2007 21:38 »  |  | 
 
 First MC, я на этот язык гавкаю, я на пальцах покажу, можно?         setlocale(LC_ALL,"rus");cout<<"Введите дату в формате ГГ-ММ-ДД ЧЧ:ММ:СС"
 cin>>str_data;
 
далее понадобятся функции преобразования строки в число, но сначала проверить на валидность введенной строки, строка должна соответствовать заданному формату далее, если строго по формату 0 и1 символы =ГОД 3 и 4 = Месяц и т.д |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #13 : 26-12-2007 21:43 »  |  | 
 
 Лишнее убитое время)Кому оно надо)))
 как-то так получилось, что предугадывал желание заказчика на полшага вперед, и ничего, до сих пор получается. А почему? потому что не задавал вопроса:"Кому оно надо?". Ответ:"Тебе". |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| First_MC 
								Гость
 | 
								|  | « Ответ #14 : 26-12-2007 22:09 »  |  | 
 
  :)Океу спасипо за подсказку! |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Антон (LogRus) | 
								|  | « Ответ #15 : 27-12-2007 05:39 »  |  | 
 
 First MC, по ссылке пример есть. |  
						| 
								|  |  
								|  |  Записан | 
 
 Странно всё это.... |  |  | 
	| 
			| 
					
						| Антон (LogRus) | 
								|  | « Ответ #16 : 27-12-2007 06:24 »  |  | 
 
 Что же все студенты ленивые такие. Дал ссылку с примером как строку в struct tm сконвертировать. оставалось сконверти struct tm в time_t. А они: "Я не понял, что это за хрень?" разбирайся. Инженер должен уметь пользоваться документацией и мозгом. #include <stdio.h>#include <time.h>
 #include <iostream>
 
 int main() {
 struct tm tm;
 strptime("70-01-01 00:01:01", "%y-%m-%d %H:%M:%S", &tm);
 time_t epochTime = timegm(&tm);
 std::cout << epochTime << "\n";
 return 0;
 }
 
timegm возвращает время по гринвичу timelocal, mktime - сделают корректировку по часовому моясу |  
						| 
								|  |  
								|  |  Записан | 
 
 Странно всё это.... |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #17 : 27-12-2007 10:07 »  |  | 
 
 LogRus, дело в том, что есть пунктик Функции обработки строк не использовать.
 
 может под ним подразумевалось не использовать функций приведенных тобою
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| Антон (LogRus) | 
								|  | « Ответ #18 : 27-12-2007 13:28 »  |  | 
 
 Прошу прощения погорячился.
 тогда берём парсим строчку в strunct tm отдаём её в timelocal
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Странно всё это.... |  |  | 
	| 
			| 
					
						| Антон (LogRus) | 
								|  | « Ответ #19 : 27-12-2007 14:02 »  |  | 
 
 вот #include <stdio.h>#include <time.h>
 #include <iostream>
 
 int char2int(const char * s)
 {
 return (s[0]-'0')*10 + (s[1]-'0');
 }
 
 void timetest(const char * timestr)
 {
 struct tm tm;
 memset(reinterpret_cast<void*>(&tm), 0, sizeof(struct tm));
 int tmp;
 tmp = char2int(×tr[0]);
 tm.tm_year = tmp < 69 ? 100 + tmp : tmp;
 std::cout << "tm.tm_year " << tm.tm_year<< "\n";
 
 tmp = char2int(×tr[3]);
 tm.tm_mon = tmp - 1;
 std::cout << "tm.tm_mon " << tm.tm_mon<< "\n";
 
 tmp = char2int(×tr[6]);
 tm.tm_mday = tmp;
 std::cout << "tm.tm_mday " << tm.tm_mday<< "\n";
 
 tmp = char2int(×tr[9]);
 tm.tm_hour = tmp;
 std::cout << "tm.tm_hour " << tm.tm_hour<< "\n";
 
 tmp = char2int(×tr[12]);
 tm.tm_min = tmp;
 std::cout << "tm.tm_min " << tm.tm_min<< "\n";
 
 tmp = char2int(×tr[15]);
 tm.tm_sec = tmp;
 std::cout << "tm.tm_sec " << tm.tm_sec<< "\n";
 
 
 time_t epochTime = mktime(&tm);
 std::cout << epochTime << "\n";
 }
 int main()
 {
 
 struct tm tm;
 memset(reinterpret_cast<void*>(&tm), 0, sizeof(struct tm));
 const char * timestr = "70-01-01 00:01:01";
 strptime(timestr, "%y-%m-%d %H:%M:%S", &tm);
 std::cout << "tm.tm_year " << tm.tm_year<< "\n";
 std::cout << "tm.tm_mon " << tm.tm_mon<< "\n";
 std::cout << "tm.tm_mday " << tm.tm_mday<< "\n";
 std::cout << "tm.tm_hour " << tm.tm_hour<< "\n";
 std::cout << "tm.tm_min " << tm.tm_min<< "\n";
 std::cout << "tm.tm_sec " << tm.tm_sec<< "\n";
 
 
 time_t epochTime = mktime(&tm);
 std::cout << epochTime << "\n";
 
 timetest(timestr);
 return 0;
 }
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Странно всё это.... |  |  | 
	| 
			| 
					
						| First_MC 
								Гость
 | 
								|  | « Ответ #20 : 27-12-2007 22:07 »  |  | 
 
 Спасип,ща попытаюсь разобрать,что к чему)
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| First_MC 
								Гость
 | 
								|  | « Ответ #21 : 27-12-2007 22:09 »  |  | 
 
  "Я не понял, что это за хрень?" 
 Ну извините я ещё не на столько знаю хорошо СИ!Так что сорр за тупые посты) |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Антон (LogRus) | 
								|  | « Ответ #22 : 28-12-2007 06:13 »  |  | 
 
 First MC, я же извинился.   ну да ладно.   |  
						| 
								|  |  
								|  |  Записан | 
 
 Странно всё это.... |  |  | 
	| 
			| 
					
						| First_MC 
								Гость
 | 
								|  | « Ответ #23 : 03-01-2008 23:27 »  |  | 
 
 strptime(timestr, "%y-%m-%d %H:%M:%S", &tm);Утута ругается компилятор на strptime ))) А так спасипо))) Предыдущий контекст программы(мой) был доработан))) Ну не под жесткие стандарты но доработан    Ещё раз всех благодарю за помощь ) |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #24 :  04-01-2008 09:29 »   |  | 
 
 Ф-ия strptime входит в POSIX.Посмотри strftime. Это тоже из POSIX.
 В крайнем случае - используй sprintf().
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	|  |