グリニッジ標準時からの差を求めるには?

解決


エッグ  2006-08-25 21:25:54  No: 62829  IP: 192.*.*.*

はじめまして。
C++(VS 6.0)でパソコンのローカルの時間とグリニッジ時のオフセット量を取得したいのですが、うまくいきません。
_tzset();
long time = _timezone;
で取れると思ったのですが、timeに入っていたのは0xfffffff7という数字で
intするとやはりおかしな数字でした。
日本時間なら9になるはずですよね?
どうしたらいいでしょうか?
ちなみに環境設定でTZ=JST-9を登録してみましたがだめでした。
どなたかお願いします。

編集 削除
Blue  2006-08-25 21:58:39  No: 62830  IP: 192.*.*.*

setlocale( LC_ALL, "Japanese" );
を入れてください。

Microsoft サポートオンライン
http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B409106

サンプル)
#include <time.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>

int main( void )
{
    setlocale( LC_ALL, "Japanese" );
    if( _putenv( "TZ=JST-9" ) != -1 )
    {
        _tzset();
        long t = _timezone;
        printf( "時差 %ld 時間\n", t / 3600 );
    }
   return 0;
}

編集 削除
スクウェア三大悪女筆頭ヨヨ  2006-08-25 22:29:53  No: 62831  IP: 192.*.*.*

マルチポスト
http://f57.aaa.livedoor.jp/~jeanne/bbs/faq.cgi?mode=al2&namber=5987

編集 削除
TT414  2006-08-26 13:07:34  No: 62832  IP: 192.*.*.*

>で取れると思ったのですが、timeに入っていたのは0xfffffff7という数字で
>intするとやはりおかしな数字でした。
>日本時間なら9になるはずですよね?

0xfffffff7であっています。

日本時間は−9です。

>TZ=JST-9
でも"-9"として登録しています。

編集 削除
Blue  2006-08-27 01:20:01  No: 62833  IP: 192.*.*.*

>0xfffffff7であっています。
そうでしたね。ロケールを設定するのは別の問題だったですね。

_timezoneが返す値は、秒数なので、
>        printf( "時差 %ld 時間\n", t / 3600 );
にょうに、60分×60秒 をしないと、時にはなりませんね。

編集 削除
エッグ  2006-08-29 21:37:06  No: 62834  IP: 192.*.*.*

返事が遅れて申し訳ありません。
無事解決しました。
秒を時間に直すこと、そして結果の+−を逆に考えてました。
簡単なことでしたね。
ありがとうございました

編集 削除