Tools.h++ 7.0 ユーザーズガイド: 4 - クラス RWTime の使用法

Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.

# クラス RWTime の使用法 | # 4 |

クラス RWTime は、1901 年 1 月 1 日 UTC からの秒数として格納された日付を表現します。UTC は、GMT (グリニッジ標準時) とも呼ばれます。格納できる秒数は、システム上の `long` のサイズによって制限されます。4 バイト (32 ビット) の `long` によって表わすことができる最後の日付と時刻は、2037 UTC の 2 月 5日 22 時 28 分 15 秒です。

クラス RWTime は、広く使用されている標準であり計算に便利であるため UTCを使用しますが、これは日常生活で普通に使用される時間ではありません。時刻をいうときには現地時間を使用しますが、これには夏時間 (DST) が適用されていることもあれば、そうでないこともあります。そのうえ、夏時間が実際に施行されている場合とそうでない場合があります。

RWTime オブジェクトを作成して現在の時刻を表わす場合、ライブラリは現在の UTC 時刻をオペレーティングシステムから直接獲得します。しかし、RWTime オブジェクトを特定の時刻に合わせて作成する場合、UTC を使用することはほとんどありません。ほとんどの場合は、他のタイムゾーンに合わせた時刻を使用することになります。また、RWTime を実行するためのタイムゾーンを指定するか、またはその時刻を出力する必要があります。したがって、デフォルトにより RWTime は、`RWZone::local()` で設定された大域的な現地時間を使用します。

## タイムゾーンの設定

さて、本ライブラリはこの現地時間をどのようにして判別するのでしょうか。

UNIX オペレーティングシステムでは、現地タイムゾーンの設定、および夏時間の適用の有無の指定を行うことができます。クラス RWTime は種々のシステムコールを使用してこれらの値を判別し、それに応じて自分自身を設定します。クラス RWTime は、北米あるいは夏時間が適用されない地域では正しく機能するはずです。ただし、米国の夏時間規則が適用されない場所では、現地タイムゾーンを初期化し直す必要があるかもしれません。この点については、『Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル』の 「RWZone」を参照してください。

各種の Windows オペレーティングシステムのユーザーは、時刻スイッチを手作業で設定しなければならない場合があります。この方法は、コンパイラによって異なります。何も設定しないと、クラスは現地時間に合わせて正しく機能しますが、コンピュータには現地時間から GMT への時差を知る方法がないため、正しい GMT が与えられない可能性があります。

Borland、MetaWare、Microsoft、Symantec、Watcom を使用する場合は、環境変数 TZ を適切なタイムゾーンに設定する必要があります。次に例を示します。

      set TZ=PST8PDT

詳細については、コンパイラの実行時ライブラリリファレンスの関数 `tzset()` または `_tzset()` の項を参照してください。

コンピュータのシステムクロックを設定して、正しく機能するようにしておく必要もあります。PC を使用している場合は、システムクロックに電力を供給するバッテリを必ず充電するようにしてください。

## コンストラクタ

RWTime を生成する方法はいくつかあります。

1. 現地時間での現在の時刻で RWTime を生成する。

          RWTime t;

2. 現地での時間 (0-23)、分 (0-59) および秒 (0-59) を指定して、今日の日付で RWTime を生成する。

          RWTime t(16, 45, 0);                        // 今日, 16:45:00

3. 日付と現地時間を指定して RWTime を生成する。

          RWDate d(2, "June", 1952);
          RWTime t(d, 16, 45, 0);                    // 1952 年 6 月 2 日 16:45:003

4. 日付とタイムゾーンを指定して RWTime を生成する。

          RWDate d(2, "June", 1952);
          RWTime t(d, 16, 45, 0, RWZone::utc());  // 1952 年 6 月 2 日 16:45:00

## メンバー関数

クラス RWTime は、RWTimes の比較、格納、復元、加算、減算を行うためのメンバー関数を備えています。RWTime は時間、分、または秒を返したり、あるいは任意のタイムゾーンについて struct tm に記入することができます。なお、『Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル』に全メンバー関数のリストが掲載されています。

たとえば、現地タイムゾーンおよびグリニッジ標準時 (GMT) における時間を出力し、さらに完全な現地時間および日付を出力するコードの断片は次のとおりです。

      RWTime t;
      cout << t.hour() << endl;                  // 現地時間
      cout << t.hour(RWZone::utc()) << endl;     // UTC 時間
      cout << t.asString('c') << endl;           // 現地時間と日付

『Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル』の「RWLocale」の項にある時刻についての c と他の形式文字の定義を参照してください。次の例は、夏時間が現在の年と現地のタイムゾーンで始まるのがいつかを調べる方法を示しています。

      RWDate today;                              // 現地時間
      RWTime dstStart = RWTime::beginDST (today.year(),
      RWZone::local());)

これによって、北米以外のタイムゾーンの正しい結果が確実に出されるようにするには、適切な夏時間規則を設定した RWZoneSimple によって `RWZone::local()` をリセットする必要があります。詳細については、『Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル』の「RWZoneSimple」を参照してください。『Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル』の「RWLocale」にある時間を示す `c` と他の書式指定文字の項目を参照してください。