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
Технический
Администратор
Offline
Пол:
|
|
« Ответ #24 : 04-01-2008 09:29 » |
|
Ф-ия strptime входит в POSIX. Посмотри strftime. Это тоже из POSIX. В крайнем случае - используй sprintf().
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|