UTC + 2에서 UTC + 0까지 dpkg-reconfigure tzdata
을 사용하여 우분투 시간대를 변경했지만 다시 부팅 한 후에도 이전 시간대에 tz_minuteswest
및 tv_sec
을 표시하는 C 코드 gettimeofday()가 계속 실행되었습니다. 만은 gettimeofday()하면 아래의 C 코드를 실행 한 후 UTC + 0 시간을 보여주는에 시작 : GCC의 어떤 종류는 시간대의/libc의 독립적 인 구성쉘에서 시간대를 변경해도 재부팅 후에도 gettimeofday()에 영향을주지 않는 이유는 무엇입니까?
#include <stdlib.h>
#include <stdio.h>
#include <sys/time.h>
int main()
{
struct timeval tv;
struct timezone tz;
setenv("TZ", "UTC", 1);
tzset();
gettimeofday(&tv, &tz);
tv.tv_sec -= 7200;
tz.tz_minuteswest = 0;
settimeofday(&tv, &tz);
gettimeofday(&tv, &tz);
printf("time: %llu, offset: %d\n",
(long long unsigned)tv.tv_sec, tz.tz_minuteswest);
}
있습니까? 전체 시스템에서 쉘에서 시간대를 변경하는 방법은 무엇입니까?
감사합니다.
TZ 환경 변수로 시간대를 재정의 할 수 있습니다 (코드에서 수행 한 것과 동일합니다). 어쩌면 TZ는 프로그램이 시작되기 전에 UTC-2로 설정되어 있습니까? – StenSoft
당신은'dpkg-reconfigure tzdata'를 실행하고이 샘플 코드를 함께 실행하여 전체 시스템의 시간대를 조정해야한다는 것을 의미합니까? –
아니요. tzdata는 기본 표준 시간대 만 설정합니다. 모든 사용자와 모든 프로그램은 환경 변수 TZ를 사용하여 자유롭게이를 재정의 할 수 있습니다. – StenSoft