Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Временная метка Unix.HELP  (Прочитано 19005 раз)
0 Пользователей и 1 Гость смотрят эту тему.
First_MC
Гость
« : 25-12-2007 23:20 » 

Только учусь программировать... Столкнулся с ситуацией,что дали задание на лабу надо сдать,но как не знаю,лектор заболел и не хрена нам не расказал по теме,можете помочь написать!!Просто сессия подпирает(((Буду очень благодарен

В массиве, содержащем случайные значения даты и времени в формате ГГ-ММ-ДД ЧЧ:ММ:СС заменить их на значения в формате временной метки Unix. Функции обработки строк не использовать.
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #1 : 26-12-2007 06:47 » 

используй
strptime
time и т.п.

читай описание на www.opennet.ru
Записан

Странно всё это....
First_MC
Гость
« Ответ #2 : 26-12-2007 09:30 » 

А можно можете именно с кодом помочь,я просто не пойму как эти функции работают
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #3 : 26-12-2007 10:44 » 

http://www.opennet.ru/man.shtml?topic=strptime&category=3&russian=0

сейчас некогда может позже, если вспомню
сначала строку конвертирует в tm структуру потом уже в time_t думаю сами найдёте как
Записан

Странно всё это....
First_MC
Гость
« Ответ #4 : 26-12-2007 20:58 » 

Все спасип,уже все сам написал)))
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 26-12-2007 21:18 » 

не совсем справился с заданием Улыбаюсь
дата и время в формате ГГ-ММ-ДД ЧЧ:ММ:СС
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
First_MC
Гость
« Ответ #8 : 26-12-2007 21:20 » 

Ну так что нужно исправить или переделать?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 26-12-2007 21:38 » 

First MC, я на этот язык гавкаю, я на пальцах покажу, можно?
Код:
        setlocale(LC_ALL,"rus");
cout<<"Введите дату в формате ГГ-ММ-ДД ЧЧ:ММ:СС"
cin>>str_data;
далее понадобятся функции преобразования строки в число, но сначала проверить на валидность введенной строки, строка должна соответствовать заданному формату
далее, если строго по формату
0 и1 символы =ГОД
3 и 4 = Месяц
и т.д
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 26-12-2007 21:43 » 

Цитата
Лишнее убитое время)Кому оно надо)))
как-то так получилось, что предугадывал желание заказчика на полшага вперед, и ничего, до сих пор получается.
А почему? потому что не задавал вопроса:"Кому оно надо?". Ответ:"Тебе".

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
First_MC
Гость
« Ответ #14 : 26-12-2007 22:09 » 

 :)Океу спасипо за подсказку!
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #15 : 27-12-2007 05:39 » 

First MC, по ссылке пример есть.
Записан

Странно всё это....
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 27-12-2007 10:07 » 

LogRus, дело в том, что есть пунктик
Функции обработки строк не использовать.

может под ним подразумевалось не использовать функций приведенных тобою
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #18 : 27-12-2007 13:28 » 

Прошу прощения погорячился.

тогда берём парсим строчку в strunct tm отдаём её в timelocal
Записан

Странно всё это....
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #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(&timestr[0]);
        tm.tm_year = tmp < 69 ? 100 + tmp : tmp;
        std::cout << "tm.tm_year " << tm.tm_year<< "\n";

        tmp = char2int(&timestr[3]);
        tm.tm_mon = tmp - 1;
        std::cout << "tm.tm_mon " << tm.tm_mon<< "\n";

        tmp = char2int(&timestr[6]);
        tm.tm_mday = tmp;
        std::cout << "tm.tm_mday " << tm.tm_mday<< "\n";

        tmp = char2int(&timestr[9]);
        tm.tm_hour = tmp;
        std::cout << "tm.tm_hour " << tm.tm_hour<< "\n";

        tmp = char2int(&timestr[12]);
        tm.tm_min = tmp;
        std::cout << "tm.tm_min " << tm.tm_min<< "\n";

        tmp = char2int(&timestr[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)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 04-01-2008 09:29 » new

Ф-ия strptime входит в POSIX.
Посмотри strftime. Это тоже из POSIX.
В крайнем случае - используй sprintf().
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines