次のC ++コードを検討してください。
#include <ctime>
#include <iostream>
int main()
{
    std::time_t now = std::time(nullptr);
    struct tm local = *std::localtime(&now);
    struct tm gm = *std::gmtime(&now);
    char str[20];
    std::strftime(str, 20, "%Z", &local);
    std::cout << str << std::endl;          // HKT
    std::strftime(str, 20, "%Z", &gm);
    std::cout << str << std::endl;          // UTC
    return 0;
}だから、中に格納されてnowいる間、明確な積分値であるlocalとgmされstruct tmている店舗の人間が読める日付/時刻情報。次に、struct tmオブジェクトのみに基づいてフォーマットされた情報(タイムゾーン)を出力します。
cplusplus リファレンスによると、のデータメンバーstruct tmは
tm_sec  
tm_min  
tm_hour 
tm_mday 
tm_mon  
tm_year 
tm_wday 
tm_yday 
tm_isdstそれがaにstruct tm含まれているすべての場合、プログラムはどのようにしてそれからタイムゾーン情報を認識しますか?つまり、それはどのようにタイムゾーンがあることを知っているHKTためlocal、タイムゾーンがあることUTCのためにgm?
それだけではない場合struct tmは、タイムゾーン情報の格納方法を説明してください。
ちなみに、デモコードはC ++ですが、この質問は本質的には正当なCの質問でもあると思います。
tm、どのようにしてstrftime2枚に異なる方法で応答するために知っているstruct tmオブジェクト?ない限り、tmのようないくつかの情報が含まれ、これはtmによって作成されlocaltime、そのtmことによって作成されますgmtime。
                tm構造体は、タイムゾーンに関する情報が格納されていない、あなたはそれが何だと思いますか?違いは、とへの呼び出しにgmtime()ありlocaltime()ます。
                strftime吸盤を区別する方法を探しています。POSIXは何が起こるかを未定義のままにしておく必要があります。
                tm、追加の情報を含む非標準のsを見たことを思い出しました。こちらが1つです。const char *tm_zoneメンバーに注意してください。どのプラットフォーム用にコンパイルしていますか?見てみましょうtm、彼らは構造を拡張しましたかどうかを確認するために実施。
                
tmタイムゾーン情報は含まれていません。strftime舞台裏のブードゥー教によってタイムゾーンを取得します。一般的にタイムゾーンを取得したい場合、それは少し混乱しています。(現在)タイムゾーンを取得する標準的な方法はありません。幸いハワードヒナントは、そのジョブにあります...。