2016-11-10 9 views
0

libssh2linuxとし、C++を使用しています。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 serverが提供するfile属性のtime変数はすでに秒単位で提供されており、タイムゾーン情報は含まれていません。私はこれをどうやって得ることができるか知っていますか? –

+0

私は分かりません。あなたは、attrs.mtimeはGMT時間で、あなたのタイムゾーンに変換したいと書いています。それはSFTPサーバーに関連するようには思われません。 – Roman

関連する問題