我在libssh2
linux
上使用C++
。
我打算在从sftp下载文件之前看到上次修改时间。
为此,我使用以下命令:
LIBSSH2_SFTP_ATTRIBUTES attrs;
libssh2_sftp_fstat_ex(sftp_handle, &attrs, 0);
我得到attrs.mtime
的最后一次修改时间,这是一个long
类型,可以给出秒数。
但是,此值与时区GMT + 0相同。我怎么能得到我当地时区的时间?
谢谢。
答案 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
环境变量,这就是系统知道使用哪个时区的方式。