madf: (Default)
[personal profile] madf
Функція mktime використовується для перетворення із broken-down time у класичний timestamp. Час, що передається структурою, mktime вважає локальним, прив'язаним до встановленої time zone. Через це можна отримати дивні результати. Наприклад, 1970-01-01 00:00:00 перестає бути нулем і стає -10800.
Існує функція timegm, що є розширенням GNU до libc, яка має той-же синтаксис, але вважає переданий час таким що належить до UTC. Ця функція є у мене в libc і є у libc FreeBSD 4.6 (я перевірив). Але у мані пишуть:

       For a portable version of timegm(), set the TZ environment variable  to
       UTC, call mktime() and restore the value of TZ.  Something like

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

              time_t my_timegm (struct tm *tm) {
                  time_t ret;
                  char *tz;

                  tz = getenv("TZ");
                  setenv("TZ", "", 1);
                  tzset();
                  ret = mktime(tm);
                  if (tz)
                      setenv("TZ", tz, 1);
                  else
                      unsetenv("TZ");
                  tzset();
                  return ret;
              }

Profile

madf: (Default)
madf

April 2018

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 7th, 2026 05:46 am
Powered by Dreamwidth Studios