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; }
Olisko toisessa päivätkin mukana. Mikset kokeile tulostaa moelmpien aikojen (nykyinenAika ja mennytAika) arvoa ennen tuota aikaerotuksen laskemista, niin saattaa avautua.
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.