gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:03 25 4
gpt4 key购买 nike

我在 linux 上使用 libssh2C++

我打算在从 sftp 下载文件之前查看最后修改时间。

为此,我使用以下命令:

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

我使用 attrs.mtime 获取最后修改时间,它是一个提供秒数的 long 类型。

但是,这个值是与时区 GMT+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,然后使用时区信息将时间转换为正确的时区。 tzset 读取 TZ 环境变量,这就是系统知道要使用哪个时区的方式。

关于c++ - libssh2 远程文件属性上次修改时间错误的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40529948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com