1

に似ている:

過去の時刻を GMT に変換する

今回のシナリオは次のとおりです。「2011061411322100」という形式の文字列時刻を GMT に変換する必要があります。問題は、時間が別の PC から来ており、歴史的な時間であることです。そのため、リアルタイムで時間を取得していないため、コードが実行されているボックスの現地時間から単純に GMT を取得することはできません。

時刻は開始時刻と終了時刻を表します。時間の変更中にコードが実行されている場合、時間の変更は、時間を取得しているリモート ボックスに適用されます。そのため、変更が開始時間と終了時間の間に発生した場合、終了時間はオフセットされます。

最初に tm に変換する必要があると思います:

// add to tm struct
tm tmTime;
tmTime.tm_hour = hour; 
tmTime.tm_min = min; 
tmTime.tm_sec = sec; 
tmTime.tm_mday = day; 
tmTime.tm_mon = (month-1); 
tmTime.tm_year = (year - 1900); 

次に、time_tに変換します

time_t tmInTime_t = mktime( &tmTime );

次に、gmtime を使用します。

struct tm *gmt = gmtime( &tmInTime_t );

開始と終了の間で時間の変更が発生した場合、これは依然として大きなデルタを引き起こします。どうすれば修正できますか? .tm_isdst を設定する必要がありますか? 何を設定すればよいかどうすればわかりますか?

4

1 に答える 1

1

ソースデータの参照タイムゾーンを絶対に知っておく必要があります。ソース マシンの現地時間であると単純に言うだけでは、十分な情報が得られません。考慮してください (多くの例のうちの 1 つとして): DST ルールは 2007 年に米国で変更され、その範囲にまたがる日付計算ではそれを考慮する必要があります。政治的な国境を越えてタイムゾーンを扱うようになると、事態はさらに複雑になります。

http://www.boost.org/doc/libs/1_47_0/doc/html/date_time.html は、C++ で記述された堅牢な時刻/日付ライブラリの例であり、ほとんどのプラットフォームで動作します。日付と時刻に対してさまざまな「算術」演算を実行できます。また、TZ データベースのサポートも含まれており、タイムゾーン ルールの変更にまたがる日時に対して操作を実行できます。

于 2011-08-02T03:02:50.390 に答える