Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.
クラス RWTime の使用法 |
4 |
クラス 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
コンピュータのシステムクロックを設定して、正しく機能するようにしておく必要もあります。PC を使用している場合は、システムクロックに電力を供給するバッテリを必ず充電するようにしてください。
コンストラクタ
RWTime を生成する方法はいくつかあります。
RWTime t;
RWTime t(16, 45, 0); // 今日, 16:45:00
RWDate d(2, "June", 1952); RWTime t(d, 16, 45, 0); // 1952 年 6 月 2 日 16:45:003
RWDate d(2, "June", 1952); RWTime t(d, 16, 45, 0, RWZone::utc()); // 1952 年 6 月 2 日 16:45:00
たとえば、現地タイムゾーンおよびグリニッジ標準時 (GMT) における時間を出力し、さらに完全な現地時間および日付を出力するコードの断片は次のとおりです。
RWTime t; cout << t.hour() << endl; // 現地時間 cout << t.hour(RWZone::utc()) << endl; // UTC 時間 cout << t.asString('c') << endl; // 現地時間と日付
RWDate today; // 現地時間 RWTime dstStart = RWTime::beginDST (today.year(), RWZone::local());)