перевод времени в часовой пояс, 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 ); }
|