2016-11-10 14 views
0

libssh2linuxC++을 사용하고 있습니다.libssh2 원격 파일 특성 잘못된 시간대를 사용하는 마지막 수정 시간

sftp에서 파일을 다운로드하기 전에 최종 수정 시간을 확인하려고합니다.

LIBSSH2_SFTP_ATTRIBUTES attrs; 
libssh2_sftp_fstat_ex(sftp_handle, &attrs, 0); 

내가 초를 제공하는 long 유형이 attrs.mtime와 마지막 modiciation 시간을 얻을 :

내가이 명령을 사용, 그렇게합니다.

그러나이 값은 표준 시간대 GMT + 0입니다. 현지 시간대로 어떻게 시간을 낼 수 있습니까?

감사합니다.

답변

0

C 시간대 변환 기능에 대한 표준 라이브러리 지원은 끔찍합니다. 그러나 간단히 말해 tzname 변수가 올바르게 설정되었다고 가정하면 다음을 수행 할 수 있습니다.

struct tm tm_utc; 
gmtime_r(&attrs.mtime, &tm_utc); // Converts from epoch time_t to utc struct. 
time_t local_time = mktime(&tm_utc); // converts from time struct back to time_t in local time. 

printf("local timezone %s, difference %ld\n", *tzname, attrs.mtime - local_time); 

mktime 호출이 내부적으로 tzset 다음 오른쪽 시간대에 시간을 번역에 대한 시간대 정보를 사용 유의하시기 바랍니다. tzsetTZ이며 이는 시스템이 사용하는 표준 시간대를 어떻게 인식 하는지를 나타냅니다.

+0

감사합니다. 하지만 문제의 핵심 인 sftp (libssh2 라이브러리)는 고려하지 않았습니다. sftp 서버에서 제공하는 file 속성의 시간 변수는 이미 초 단위로 제공되며 시간대 정보를 포함하지 않습니다. 어떻게 이걸 얻을 수 있니? –

+0

나는 이해하고 있는지 잘 모르겠다. attrs.mtime은 GMT 시간이고 * your timezone으로 변환하고 싶다고 썼다. 그것은 sftp 서버와 관련이없는 것 같습니다. – Roman