Avatar billede KlausEC Nybegynder
03. september 2009 - 15:41 Der er 8 kommentarer og
1 løsning

omregning fra epoch til "reel tid" i ansi C

Som overskriften siger, vil jeg gerne omregne en epoch værdi (sekunder siden 1. januar 1970, kl 00:00:00) til en "reel dato værdi"
Jeg har min epoch værdi gemt i en unsigned long variabel (32-bit unsigned)
jeg vil gerne have udfylde følgende variable ud fra epoch'en:

unsigned char seconds
unsigned char minutes
unsigned char hours
unsigned char dayofmonth
unsigned char month
unsigned char year

Det ville altsammen være ret nemt, hvis jeg ikke skulle tage hensyn til skudår...

Er der en smart måde at gøre dette på, eller skal jeg hele "smøren" igennem for at beregne dem?
Avatar billede arne_v Ekspert
03. september 2009 - 15:47 #1
gmtime og localtime
Avatar billede arne_v Ekspert
03. september 2009 - 15:48 #2
de omregner fra time_t til struct tm
Avatar billede arne_v Ekspert
03. september 2009 - 15:50 #3
Hvis du skal udskrive saa kig paa strftime.
Avatar billede KlausEC Nybegynder
03. september 2009 - 15:51 #4
ja, ok - lidt for meget copy/paste...
året skal selvfølgelig være:

unsigned short int year
Avatar billede KlausEC Nybegynder
03. september 2009 - 15:52 #5
jeg prøver, tak arne_v :)
Avatar billede KlausEC Nybegynder
04. september 2009 - 14:06 #6
Jeg kan dog ikke fatte, hvordan det skal laves :P

Er det sådan, du tilfældigvis har et eksempel liggende på, hvordan jeg konverterer? :)

De eksempler, jeg har set på, benytter kun gmtime og localtime til at udskrive...

min metode (so far) :
void ClockConvertEpoch (unsigned long epoc)
{
  struct tm *utc;
  time_t t = epoc;
  utc = gmtime(&t);

... blah?

}
Avatar billede arne_v Ekspert
04. september 2009 - 15:17 #7
utc = gmtime(&t);

konverterer fra time_t til struct tm

struct tm ser typisk ud som:

struct tm
{
        int    tm_sec;        /* Seconds: 0-59 (K&R says 0-61?) */
        int    tm_min;        /* Minutes: 0-59 */
        int    tm_hour;        /* Hours since midnight: 0-23 */
        int    tm_mday;        /* Day of the month: 1-31 */
        int    tm_mon;        /* Months *since* january: 0-11 */
        int    tm_year;        /* Years since 1900 */
        int    tm_wday;        /* Days since Sunday (0-6) */
        int    tm_yday;        /* Days since Jan. 1: 0-365 */
        int    tm_isdst;      /* +1 Daylight Savings Time, 0 No DST,
                                * -1 don't know */
};

saa du bruger bare utc.tm_mday naar du vil have fat paa maaneden

o.s.v.
Avatar billede KlausEC Nybegynder
08. september 2009 - 09:57 #8
nå, sådan! :)

Det lader til at virke nu.
Du skal have mange tak for hjælpen - lav endelig et svar :)
Avatar billede arne_v Ekspert
08. september 2009 - 15:05 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester