2014-12-19 6 views
-1

UTC 시간을받는 데 문제가 있습니다. 테스트 코드와 함께, 내가 gmtime과 localtime으로 모두 같은 결과를 반환 것을 발견gmtime_r 및 localtime_r()은 vxworks에서 동일한 결과를 반환합니다.

void testTimeLib() 
{ 
    struct tm utcTime, localTime; 
    time_t now; 
    char utcStr[80], localStr[80]; 

    time(&now); 
    gmtime_r(&now, &utcTime); 
    localtime_r(&now, &localTime); 

    memset(utcStr, 0, sizeof(utcStr)); 
    strftime(utcStr, sizeof(utcStr), "%Y-%m-%dT%H:%M:%S", &utcTime); 

    memset(localStr, 0, sizeof(localStr)); 
    strftime(localStr, sizeof(localStr), "%Y-%m-%dT%H:%M:%S", &localTime); 

    printf("UTC Time\tutcTime <%s>\n", utcStr); 
    printf("Local Time\tlocalTime <%s>\n", localStr); 
} 

결과가

-> testTimeLib 
UTC Time utcTime <2014-12-19T10:57:33> 
Local Time localTime <2014-12-19T10:57:33> 

이 gmtime_r과 된 localtime_r의 소스 코드를 확인하는 것입니다, 나는 __getZoneInfo가 호출 발견 localtime_r은 0을 반환하며 이는 시간대가 0임을 의미하며 실제 시간대는 GMT + 8이어야합니다.

그럼 내 질문은 어떻게 시스템에 시간대를 설정할 수 있습니까?

+0

http://stackoverflow.com/a/11785853/2410359 도움이 될 수 있습니다. – chux

답변

1

gmtimelocaltime 함수 차이는 gmtime 함수 현지 시간으로 일정 시간을 변환하는 것 때문이다. 하지만 localtime 함수는 달력 시간을 UTC로 표시된 분해 시간으로 변환합니다.

hwclock 명령을 사용하여 표준 시간대를 설정할 수 있습니다. 수퍼 유저 만이이 명령을 실행할 수있는 권한을가집니다. 수퍼 유저로 로그인하고이 명령을 실행하십시오.

+1

OS가 vxworks이므로 해당 명령이 없지만 putenv를 사용하여 시간대를 설정 했으므로 이제 문제가 다시 발생합니다. – Rgls

+0

@ Rgls 리눅스를 사용한다면'hwclock' 명령을 사용할 수 있습니다. – sharon

관련 문제