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

解決


エッグ  2006-08-26 06:25:54  No: 62829

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


Blue  2006-08-26 06:58:39  No: 62830

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-26 07:29:53  No: 62831

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


TT414  2006-08-26 22:07:34  No: 62832

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

0xfffffff7であっています。

日本時間は−9です。

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


Blue  2006-08-27 10:20:01  No: 62833

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

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


エッグ  2006-08-30 06:37:06  No: 62834

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加