libssh2远程文件属性上次修改时间错误的时区

时间:2016-11-10 14:26:39

标签: c++ linux libssh2

我在libssh2 linux上使用C++

我打算在从sftp下载文件之前看到上次修改时间。

为此,我使用以下命令:

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

我得到attrs.mtime的最后一次修改时间,这是一个long类型,可以给出秒数。

但是,此值与时区GMT + 0相同。我怎么能得到我当地时区的时间?

谢谢。

1 个答案:

答案 0 :(得分:0)

C标准库对时区转换功能的支持非常糟糕。 但总之,假设$sql = "SELECT `testName`, `percentile`, `dateTaken`, `correct`, `total`, `timeSpent` FROM `results` WHERE `uniID` = 5 AND `userID` = $_SESSION[userid] ORDER BY `dateTaken` ASC"; 变量设置正确,您可以执行以下操作。

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); 在内部调用tzset,然后使用时区信息将时间转换为正确的时区。 mktime读取tzset环境变量,这就是系统知道使用哪个时区的方式。