내가 아주 단순한 것으로 생각하는 것을 찾고 있는데 - 특정 시간대 (예 : "America/New_York"와 같이 문자열로 지정)에 로컬 Unix 시간을 주면 - 이 아니라 현지 시간으로이됩니다. 해당 시간 값 (GMT).Linux에서 시간대 변환 C API, 누구입니까?
이 #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;
}
꼭보다 더 나은 방법이있을 : 그것은 소리 즉,
time_t get_gmt_time(time_t local_time,
const char* time_zone);
으로 믿을 수 없 간단한의 라인을 따라 뭔가, 내가 찾을 수있는 가장 가까운 timegm의 man 페이지에서 다음 코드 조각이었다 이것은 호전적으로 스레드로부터 안전한 가증 행위가 아닙니다. 맞습니까? 권리??
좋은 질문입니다. 상황은 정말 그렇게 나빠요. 전 세계는 다른 표준 시간대에있는 것처럼 보이지 않거나 아마도 UTC 이외의 시간대로 변환해야한다고 생각하는 것처럼 보입니다. 그것은 문제입니다. –
'time_t'와'struct tm'의 의미는 약간 혼란 스럽습니다.모든 UN * X 계열 시스템에서'time_t' /'time()'은 'epoch'(UTC 0:00 01/01/1970) 이후의 초이며, 이는 struct tm으로 변환 될 수 있습니다. 'mtime()'은 반대쪽에'struct tm'을'time_t로 변환한다. (timezone-corrected 결과를 준다)'gmtime()'(UTC로 결과를 준다) '. 그럼 당신이 코딩 한 것은'mktime()'입니다. –
스레드 안전 문제에 관심이 있습니다. "현재"영역이 아니라 임의의 시간대로 변환하는 방법 ** 스레드로부터 안전한 ** 방법. 변환뿐만 아니라 strftime을 사용하여 영역을 인쇄하십시오. – netjeff