The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
перевод времени в часовой пояс, !*! Sergeyka, 15-Апр-06, 23:18  [смотреть все]
получаю данные,
заполняю struct tm* ptm;
    ptm->tm_sec = 10;
    ptm->tm_min = 20;
    ptm->tm_hour = 1;
    ptm->tm_mday =15;
    ptm->tm_mon = 3;
    ptm->tm_year = 2006 -1900;

далее мона
strftime( time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", ptm );
и тп

люди плз HELP, как корректно перевести полученное время GMT например в Мск часовой пояс,
что бы учесть переходы день/месяц/год/высокосные

  • перевод времени в часовой пояс, !*! DeadMustdie, 10:56 , 16-Апр-06 (1)
    Если время в GMT доступно как time_t, проблема решается тривиально через функцию localtime(). Если же оное время в GMT прибыло разбитым на поля, приходится склеивать его в time_t ручками. Если кто знает стандартную функцию, пожалуйста поделитесь, мне таковая неизвестна.

    Идею кода для своей собственной реализации "склеивания" я в своё время взял отсюда:
      http://www.imatix.com/html/sfl/
    Кодом поделиться, звиняйте, не могу, часть коммерческой системы.

    • перевод времени в часовой пояс, !*! Sergeyka, 10:14 , 17-Апр-06 (2)
      • перевод времени в часовой пояс, !*! Sergeyka, 14:29 , 17-Апр-06 (3)
        наваял:
        string gmt_to_local( int year, int mon, int day, int hour, int min, int sec ){
            struct timeval tv;
            struct tm* ptm;
            char time_string[40] = {0};
            string result;
            time_t tmt;
            long tzone;
            int timezone_hours, is_dst;
            extern time_t timezone;

            is_dst = 0;
            gettimeofday(&tv, NULL);
            ptm = localtime(&tv.tv_sec);
            is_dst = ptm->tm_isdst;

            tzone = (-1) * timezone;
            timezone_hours = tzone / 3600;
            timezone_hours += is_dst;

            ptm->tm_year = year - 1900;
            ptm->tm_mon = mon -1;
            ptm->tm_mday = day;
            ptm->tm_hour = hour + timezone_hours;
            ptm->tm_min =  min;
            ptm->tm_sec = sec;

            tmt = mktime( ptm );
            ptm = localtime( &tmt );

            strftime( time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", ptm );

            result = time_string;
            return ( result );
        }




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру