Archief - [PROG][C++] Tijd omzetten

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Siskos

Legacy Member
Ik heb dus momenteel het probleem dat ik de tijd heb opgeslagen in een bestand.
Het is gewoon time(NULL) omdat ik dit nodig heb voor het verschil tussen 2 tijden te berekenen.
Maar hoe zet ik deze tijd in seconden weer terrug om naar bv 17-May-06 22:17 ?

Ik heb het hele internet zowat afgezocht maar niet echt iets gevonden wat de tijd kon omzetten en dan ook nog naar een format dat ik graag zou hebben.

Siskos

Legacy Member
Het heeeele internet.... :p
Die eerste paar sites heb ik ook wel snel gevonden maar ik moet de tijd die ik in een variabele heb zitte omzetten naar een ander formaat.... met die voorbeelden heb ik alleen gevonden hoe je de huidige tijd omzet ?

nickman

Legacy Member
Heb je je tijd nog in totale seconden (dus echt een totaal aantal jaren/maanden/dagen/... etc.) ?

Siskos

Legacy Member
Yepz, ik heb gewoon time(NULL) gedaan deze geeft mij een waarde terrug van 1147880019 bijvoorbeeld.
Zijn dus gewoon de seconden sinds 1-Jan-1970 dacht ik.

Deguchi

Legacy Member
Hmm, als ik het een beetje snap:
Ge vraagt de tijd op in een time_t type en converteerd die naar een tm type adhv van localtime.
Nu wilt ge ook weten hoe ge van een tm terug naar een time_t variabele kunt gaan? Via de mktime functie. (Als ik deze site mage geloven ;))

Ik hoop dat ik u vraag goed begrepen heb :s

killgore

Legacy Member
char* tijdstring = asctime(localtime(&time(NULL)));

echt moeilijk he :ironic:.

Als je een ander formaat dan asctime moet hebben:
Code:
	char* months[] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
	char* days[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
	char* tijdstring = new char[16]; //Vul ... zelf in.
	time_t tijd = time(NULL);
	tm tijdInfo=*localtime(&tijd);
	sprintf(tijdstring,"%02i-%s-%02i %02i:%02i",tijdInfo.tm_mday,months[tijdInfo.tm_mon],
		tijdInfo.tm_year<100?tijdInfo.tm_year:tijdInfo.tm_year-100,tijdInfo.tm_hour,tijdInfo.tm_min);

of functievorm:
Code:
char* parseTime(time_t tijd,char* format = "%02i-%s-%02i %02i:%02i")
{
	char* months[] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
	char* days[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
	char* tijdstring = new char[16]; //Vul ... zelf in.
	tm tijdInfo=*localtime(&tijd);
	//dd-MMM-YY hh:mm
	sprintf(tijdstring,format,tijdInfo.tm_mday,months[tijdInfo.tm_mon],
		tijdInfo.tm_year<100?tijdInfo.tm_year:tijdInfo.tm_year-100,tijdInfo.tm_hour,tijdInfo.tm_min);
	return tijdstring;
}

n/o, maar dat is echt easy te coden hoor als je ook maar 2 min. opzoekwerk doet (de enige fie die niet in ctime zit die ik gebruik is sprintf) :p.

edit: strftime die djeez melde zou ongeveer hetzelfde moeten doen, maar is geen ansi/iso bij mijn weten. Meer info daarover: http://www.cppreference.com/stddate/strftime.html
edit2: strftime is blijkbaar wel ansi/iso, excuses voor de fout ;).

Siskos

Legacy Member
Njah die leuke zin van char* tijdstring = asctime(localtime(&time(NULL))); geeft anders wel een error hé...

C:\testing\test.cpp(6) : error C2102: '&' requires l-value

Het is btw gewoon een Int waar ik de tijd heb ingestoken... geen time_tm of tm :confused:


dus zo ongeveer

int tijdje;
tijdje = time(NULL);
cout<<"Tijdje : "<<tijdje<<endl; //Geeft zowiets als 1147880019

Nu terrug naar 20 May 2006 - 14:53 ?

Ik heb echt alles geprobeerd wat hierboven staat maar is dit wel voor deze int of doe ik iets verkeerd met het opslaan van de tijd ? :confused:

killgore

Legacy Member
Uw opslaan van tijd is 'correct'.
time_t is gewoon een variabele opdat je geen problemen zou krijgen als je bv. op een andere compiler komt waar de teruggegeven waarde bv. een __int64 is.

Dat regeltje moet idd zijn:
time_t tijd = time(NULL);
char* tijdstring = asctime(localtime(&tijd));

excuses.

De rest van al mijn code klopt perfect.

Siskos

Legacy Member
Ok al heel fel allbedankt,
ik krijg mijn tijd door time_t nu al omgezet naar bv Sat May 20 16:09:20 2006 de gewone standaart functie van c dus denk ik.

Maar die functie die jij hebd gegeven geeft geen uitvoer als ik ze gewoon copy/paste ?

killgore

Legacy Member
Natuurlijk

Je moet nog iets als cout<<tijdstring << endl; of zo doen he :p.
Het is een format functie, geen output functie ;).

Deguchi

Legacy Member
Persoonlijk vind ik het handiger om de localtime functie op te vangen in een tm struct. Op die manier kunt ge printen wat gij precies wilt hebben.
Als ge natuurlijk enkel de volledig output moet hebben, dan is de oplossing van killgore de meest compacte ;)

killgore

Legacy Member
Deguchi zei:
Persoonlijk vind ik het handiger om de localtime functie op te vangen in een tm struct. Op die manier kunt ge printen wat gij precies wilt hebben.
Als ge natuurlijk enkel de volledig output moet hebben, dan is de oplossing van killgore de meest compacte ;)
ehm

Wat ik deed was localtime tm struct dus gebruiken om te "printen" (hier op te slaan) wat ik moest hebben.

Siskos

Legacy Member
oeiz... domme fout van mij :D echt super bedankt alles werkt nu net zoals ik het wou :niceone: :)

Deguchi

Legacy Member
killgore zei:
ehm

Wat ik deed was localtime tm struct dus gebruiken om te "printen" (hier op te slaan) wat ik moest hebben.

Ge slaagt toch niets op in een tm struct? Ge zet die onmiddelijk om naar een string met asctime.
Tenzij ge het natuurlijk hebt over u post een paar posts hoger ;)

killgore

Legacy Member
Deguchi zei:
Ge slaagt toch niets op in een tm struct? Ge zet die onmiddelijk om naar een string met asctime.
Tenzij ge het natuurlijk hebt over u post een paar posts hoger ;)
Ik had het eerder op die algemene oplossing ja.
Ik werk trouwens bijna altijd met de time-variabele verder om dan omzetting te doen, dat is kwestie van gewoonte.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan