Avatar billede nomak Nybegynder
20. maj 2003 - 11:16 Der er 7 kommentarer og
1 løsning

tids funktionerne i C går i kuk.. eller?

Hey Experter!

Jeg har lavet en lille tids funktion der returnere en streng der indeholder klokkeslet.. Men det er sådan at den er ca 2 timer bagud! Og så ser det lidt grimt ud hvis f.eks klokken er 09:05 - at den skriver 9:5

noget i kan hjælpe med?

char *time_make(int a) {
  time_t seconds = time(NULL);
  int tid = seconds;
  int timer = (tid%(24*60*60))/(60*60);
  int minutter = (tid%(60*60))/60;
  int sekunder = tid%60;
  sprintf(time_output, "%d:%d", timer, minutter);
  return time_output;
}
Avatar billede arne_v Ekspert
20. maj 2003 - 11:23 #1
Det sidste problem:

sprintf(time_output, "%02d:%02d", timer, minutter);
Avatar billede arne_v Ekspert
20. maj 2003 - 11:25 #2
Det første problem:

Skyldes formentligt at time returnerer GMT (og når vi er på sommertid
er vi 2 timer foran GMT).

Løsningen er at bruge localtime funktionen istedetfor din manuelle
konvertering.
Avatar billede arne_v Ekspert
20. maj 2003 - 11:27 #3
struct tm *localtime(const time_t *timer);

konverterer fra time_t til struct tm.

struct tm indeholder(typisk):

struct tm {
  int tm_sec;      /* seconds after the minute [0, 61]  */
  int tm_min;      /* minutes after the hour [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 January 1 [0, 365]    */
  int tm_isdst;    /* Daylight Saving Time flag        */
};
Avatar billede nomak Nybegynder
20. maj 2003 - 13:12 #4
har flg.

char *af_make(int a) {
    int timer, minutter;
    struct tm *localtime(const time_t *timer);


    sprintf(time_output, ""%02d:%02d", tm->tm_hour, tm->tm_min);
    return time_output;
}

-bash-2.05b$ cc -o a a.c
a.c:17: unterminated string or character constant
a.c:12: possible real start of unterminated constant
-bash-2.05b$
Avatar billede segmose Nybegynder
20. maj 2003 - 13:36 #5
Du mangler at kalde localtime,
fx.

struct tm * tid = localtime(&seconds);

struct tm *localtime(const time_t *timer);
er bare erklæringen af localtime funktionen.
Avatar billede arne_v Ekspert
20. maj 2003 - 13:37 #6
Der er byttet om på lidt.

Prøv med:

char *time_make(int a) {
  time_t seconds = time(NULL);
  struct tm *splittime = localtime(&seconds);
  sprintf(time_output, "%02d:%02d", splittime->tm_hour, splittime->tm_min);
  return time_output;
}
Avatar billede arne_v Ekspert
20. maj 2003 - 13:37 #7
Den compile fejl du fik skyldtes iøvrigt en " for meget.
Avatar billede nomak Nybegynder
20. maj 2003 - 13:50 #8
aah.. jeg takker :)
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