Różnica czasu w sekundach

0

Mam dwa czasy zapisane w takim formie:

czas[0]-sekundy
czas[1]-minuta
czas[2]-godzina
czas[3]-dzien
czas[4]-mc
czas[5]-rok

potrzebuję wyznaczyć w sekundach ile minęło pomiędzy czas1[], a czas2[]
Jak to najłatwiej zrobić? (czy może ktoś ma taką funkcję:)?)
Myślę że są dwie metody:
1)kilkanaście pętli itd. ale łatwo o błąd i jest to pracochłonne
2)Może jest jakaś biblioteka która umożliwia zamianę tablicy czas[] na jakiś format i skorzystać z gotowej funkcji...jaka? i jak to zrobić?
Visual c++
Z góry dziękuję za pomoc

0

Zamień sobie ten format na ilość sekund (wystarczy dodawanie i mnożenie) i porównaj (wystarczy odejmowanie).

0
Rev napisał(a):

Zamień sobie ten format na ilość sekund (wystarczy dodawanie i mnożenie) i porównaj (wystarczy odejmowanie).

nie bardzo rozumie jak zamienić ten format (tablica int) na liczbę sekund?
przy pomocy pętl itd byłoby to trudne, daty mogą różnić się np. kilkoma dniami, a niektóre mc mają 30 inne 31 dni itd i takie rzeczy trzebaby uwzględniać....

1

http://cpp0x.pl/kursy/Kurs-C++/Biblioteka-time-h/321 Ta biblioteka służy do operacji na czasie, posiada też funkcję difftime która podaje różnicę czasów w sekundach właśnie.

1
#include <ctime>
#include <iostream>

int main() {
    // Struktury trzymające czas w formacie systemowym.
    struct tm my_time1 = {0};
    struct tm my_time2 = {0};

    // Czas 1: 13:13:00 01.09.2017
    my_time1.tm_hour = 13;
    my_time1.tm_min = 13;
    my_time1.tm_sec = 0;
    my_time1.tm_mday = 1;
    my_time1.tm_mon = 9 - 1;
    my_time1.tm_year = 2017 - 1900;

    // Czas 2: 13:14:00 02.09.2017
    my_time2.tm_hour = 13;
    my_time2.tm_min = 14;
    my_time2.tm_sec = 0;
    my_time2.tm_mday = 2;
    my_time2.tm_mon = 9 - 1;
    my_time2.tm_year = 2017 - 1900;

    // Przekształcenie na ilość sekund.
    double seconds = difftime(mktime(&my_time2), mktime(&my_time1));

    std::cout << "Seconds between:\n" << asctime(&my_time1)
        << "and\n" << asctime(&my_time2) << " --> "
        << seconds << std::endl;
}
0
sig napisał(a):

http://cpp0x.pl/kursy/Kurs-C++/Biblioteka-time-h/321 Ta biblioteka służy do operacji na czasie, posiada też funkcję difftime która podaje różnicę czasów w sekundach właśnie.

Dziękuje bardzo!, tylko jest jeszcze jeden problem funkcja difftime działa na czasach podanych w formacie time_t (long), czyli moją tablicę powinienem zamienić na time_t i nie bardzo wiem jak to zrobić?

1
#include <iostream>
#include <time.h>

using namespace std;

int main()
{
    struct tm pierw, drug;
    pierw.tm_year = 2017;
    pierw.tm_mon = 5;
    pierw.tm_mday = 3;
    pierw.tm_hour = 0;
    pierw.tm_min = 5;
    pierw.tm_sec = 33;
    drug.tm_year = 2017;
    drug.tm_mon = 5;
    drug.tm_mday = 5;
    drug.tm_hour = 12;
    drug.tm_min = 3;
    drug.tm_sec = 36;
    cout << difftime(mktime(&drug), mktime(&pierw));


    return 0;
}

0
sig napisał(a):
#include <iostream>
#include <time.h>

using namespace std;

int main()
{
    struct tm pierw, drug;
    pierw.tm_year = 2017;
    pierw.tm_mon = 5;
    pierw.tm_mday = 3;
    pierw.tm_hour = 0;
    pierw.tm_min = 5;
    pierw.tm_sec = 33;
    drug.tm_year = 2017;
    drug.tm_mon = 5;
    drug.tm_mday = 5;
    drug.tm_hour = 12;
    drug.tm_min = 3;
    drug.tm_sec = 36;
    cout << difftime(mktime(&drug), mktime(&pierw));


    return 0;
}

cout << difftime(mktime(&drug), mktime(&pierw)); zwraca mi zawsze 0 nie ważnie jakie są dane, co jest nie tak?

cout<<""<<mktime(&drug)<<endl; zwraca -1 co oznacza że jest błąd konwersji, ale nie wiem czemu??

1

U mnie wydaje się działać bez zarzutu, opierałem się o przykład z http://www.cplusplus.com/reference/ctime/time/. Co do mktime, to chyba robisz to źle.

0

Problem chyba rozwiązany:

pierw.tm_year = 2017; //tak jest źle
pierw.tm_year = 2017-1900;//tak dobrze

tu był na pewno błąd,

0
Mokrowski napisał(a):
#include <ctime>
#include <iostream>

int main() {
    // Struktury trzymające czas w formacie systemowym.
    struct tm my_time1 = {0};
    struct tm my_time2 = {0};

    // Czas 1: 13:13:00 01.09.2017
    my_time1.tm_hour = 13;
    my_time1.tm_min = 13;
    my_time1.tm_sec = 0;
    my_time1.tm_mday = 1;
    my_time1.tm_mon = 9 - 1;
    my_time1.tm_year = 2017 - 1900;

    // Czas 2: 13:14:00 02.09.2017
    my_time2.tm_hour = 13;
    my_time2.tm_min = 14;
    my_time2.tm_sec = 0;
    my_time2.tm_mday = 2;
    my_time2.tm_mon = 9 - 1;
    my_time2.tm_year = 2017 - 1900;

    // Przekształcenie na ilość sekund.
    double seconds = difftime(mktime(&my_time2), mktime(&my_time1));

    std::cout << "Seconds between:\n" << asctime(&my_time1)
        << "and\n" << asctime(&my_time2) << " --> "
        << seconds << std::endl;
}

mam tylko pytanie odnośnie:
my_time2.tm_mon = 9 - 1;

to -1 ma sens czy to literówka?

ps. Dziękuję za rozwiązanie, kolega poniżej Twojego postu podał prawie identyczny przykład tylko bez 1900 dlatego tego nie zauważyłem, a jest to ważne, jeszcze raz dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1