2016-08-11 19 views
0

Unixタイムスタンプを持っていて、localtime_sと同等のものが必要ですが、タイムゾーンで渡すことができます。代わりに、私はlocaltime_sが正しい値を返すように、(システム全体ではなく)アプリのためにプログラム的にタイムゾーンを変更する方法を探しています。C++のウィンドウで時間を特定のタイムゾーンに変換するにはどうすればよいですか?

奇妙なことに、TZ環境変数をシェルでGMTに設定し、アプリケーションを起動すると、localtime_sはGMTの値を返します。

私が試した:

​​

をしかし、それは後で私がVS 2013

を使用して、Windows 7の上でアプリケーションを実行している

注意をlocaltime_s呼び出しの結果を変更しません。

+0

おそらく、適切なDateTimeライブラリを使用する必要があります。 [boost.datetime](http://www.boost.org/doc/libs/1_61_0/doc/html/date_time.html)が最善の策かもしれません。 – Xirema

+0

VS-2015? VS-2013? –

+0

@HowardHinnant、VS 2013.それはあなたの答えにどのように影響しますか? – bpeikes

答えて

1

free, open-source 3rd party libraryを使用する場合は、VS-2013で動作します。ここでそれを使用する方法の多くの例があります。たとえば

https://github.com/HowardHinnant/date/wiki/Examples-and-Recipes

はここにあるどのように出力ニューヨークとシカゴで現在の時刻に:

#include "tz.h" 
#include <iostream> 

int 
main() 
{ 
    auto now = std::chrono::system_clock::now(); 
    std::cout << "Current time in New York: " 
       << date::make_zoned("America/New_York", now) << '\n'; 
    std::cout << "Current time in Chicago : " 
       << date::make_zoned("America/Chicago", now) << '\n'; 
} 

私にとってこれだけの出力:

Current time in New York: 2016-08-12 10:36:24.670966 EDT 
Current time in Chicago : 2016-08-12 09:36:24.670966 CDT 
関連する問題