Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Nykyisen ajan ja toisen kellonajan erotus

Ville [31.08.2014 22:17:22]

#

Kyseessä siis C kielinen ohjelma, jossa ohjelmalle annetaan aika kiinteänä merkkijonona jota verrataan ohjelman suorituksen aikana otetuun aikaleimaan.
Minuutit ja sekunnit tulostuvat lopussa oikein mutta jostain syystä tunnit menevät ihan poskelleen :(

Olen ymmärtänyt, että difftime() palauttaa double arvon, eli aika arvojen välisen erotuksen sekunteina.

Osaako kukaan sanoa missä mättää?

#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#include <string.h>

int main(){

 time_t nykyinenAika = time(NULL);
 time_t mennytAika;
 struct tm *aikaLeima;
 struct tm tm;
 char *testausAika = "21:00:00";
 int aikaerotus;
 int temp,tunti,minuutti,sekunti;

 aikaLeima = localtime(&nykyinenAika);
 memset(&tm, 0, sizeof(struct tm));
 //muutetaan seuraavissa riveissä merkkijonoaika oikeaan aikamuotoon
 strptime(testausAika, "%H:%M:%S", &tm);
 mennytAika = mktime(&tm);
 // muuttujassa aikaerotus on kulunut aika sekunteina
 aikaerotus = (int)difftime(nykyinenAika, mennytAika);
 //testausta varten
 printf("Aikojen erotus sekunteina = %i\n", aikaerotus);

 tunti = aikaerotus / 3600;
 temp = aikaerotus % 3600;
 minuutti = temp / 60;
 sekunti = temp % 60;
 printf("%.2d:%.2d:%.2d\n",tunti,minuutti,sekunti);

 return 0;
}

Grez [31.08.2014 22:29:01]

#

Olisko toisessa päivätkin mukana. Mikset kokeile tulostaa moelmpien aikojen (nykyinenAika ja mennytAika) arvoa ennen tuota aikaerotuksen laskemista, niin saattaa avautua.

Okkaaj [04.09.2014 02:30:11]

#

Koitin kääntää ja ajaa ohjelman, tunnit ei tosiaan näy kunnolla mutten jaksanu siihen perehtyä.. Tässä jotain mikä saattaa auttaa, tehty klo: 02:20 että aikalaista purkkaa on... ilman minkäänlaista palautusarvojen/virheiden tarkastusta tottakai.

int main(void)
{
    //Käännetty ubuntulla w/ GNU GCC
    time_t aika1, aika2, T = time(0);
    struct tm *tm1 = localtime(&T), *tm2;
    char aikaBuff[10] = "01:45:30", muoto[10] = "%H:%M:%S";
    int aikaErotus = 0, tunnit = 0, minuutit = 0, sekunnit = 0;

    aika1 = mktime(tm1);

    printf("Testausaika: %s\n", aikaBuff);

    strptime(aikaBuff, muoto, tm1);
    aika1 = mktime(tm1);
    tm2 = localtime(&T);
    aika2 = mktime(tm2);
    strftime(aikaBuff, sizeof(aikaBuff), muoto, tm2);

    aikaErotus = (int)difftime(aika2, aika1);
    tunnit = aikaErotus / 3600;
    minuutit = (aikaErotus % 3600) / 60;
    sekunnit = (aikaErotus % 3600) % 60;

    printf("Aika nyt: %s\n", aikaBuff);
    printf("Ajoilla eroa: %.2d:%.2d:%.2d\n", tunnit, minuutit, sekunnit);

    //Ei kovin hyvän näköstä, tiedän... ;)
    return(0);
}

Ohjelman tuloste:

lainaus:

Testausaika: 01:45:30
Aika nyt: 02:20:28
Ajoilla eroa: 00:34:58

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta