0

Microsoft C++ ライブラリを使用しているため、Windows マシンでのみコンパイルされる C++ プロジェクトを変換しています。_get_timezoneUbuntu 12.10 マシンでコンパイル可能なfunction の代替手段はありますか?

MSDNの _get_timezoneドキュメント

4

2 に答える 2

2

標準関数を使用して、自分で計算するだけだと思います:

#include <time.h>

namespace time_util { 
double get_gmt_offset() { 
    time_t now = time(NULL);

    struct tm *gm = gmtime(&now);
    time_t gmt = mktime(gm);

    struct tm *loc = localtime(&now);
    time_t local = mktime(loc);

    return difftime(local, gmt);
}
}

確かにそれらを並べてテストしていませんが、これは_get_timezoneが返すと予想するものについて返します(たとえば、私にとっては-25200を返します。これはUTC-7時間になります)。

物事を少し「いじる」必要がある/したい場所の1つは、対処することですtm_isdst-_get_timezoneそれが考慮されているかどうかを確認するのに十分なほど詳しく見ていませんでした。

于 2013-04-09T20:11:36.043 に答える
1

Linux の代替手段_get_timezoneは関数ではなく、単にtimezone変数であり、 で定義されていtime.hます。

extern long timezone;
于 2016-06-22T11:06:49.710 に答える