Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル: RWDate

バナーをクリックすれば目次に戻ります

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

## RWDate

### 形式

      #include <rw/rwdate.h>RWDate a;   // 今日の日付を作成する

### 説明

  このクラスは、ユリウス日として格納されている日付を表します。メンバー関数 `isValid()` を使用して、`RWDate` が有効かどうかを調べることができます。たとえば、1991 年はうるう年ではないので、1991 年 2 月 29 日に対しては `FALSE` を返します。『Tools.h++ 7.0 ユーザーズガイド』の「Using Class RWDate」を参照してください。

  このクラスは `RWTime` との間で、また `<time.h>` で定義されている標準 C ライブラリ型 `struct tm` との間でデータを変換できます。

  コードの中で年数を 2 桁で指定していると、世紀が変わったときに不完全な動作をする可能性があります。4 桁の年数を使用して、千年単位では正確となるようなプログラムを作成することをお薦めします。

  このクラスのデフォルトのコンストラクタは現在の日付を保持するインスタンスを作成しますので、`RWDate` の大きな配列の作成には時間がかかるかもしれません。

        RWDate v[5000];     // 現在の日付を 5000 回作成する

  標準 C++ ライブラリベースの Tools.h++ テンプレートコレクションのバージョンを使用できる場合、次の点を考慮してください。

        // 現在の日付を 1 回だけ作成する
        RWTValOrderedVector<RWDate> v(5000, RWDate());

  標準コレクションのすぐれた割り当て方法のおかげで、上記の宣言では、デフォルトのコンストラクタを 1 回だけ呼び出し、その後でコピーコンストラクタを 5000 回起動しています。RWDate の場合、コピーコンストラクタは 1 つの `long` を別の `long` に代入し、単純に配列を作る場合よりも速く作成できるようになっています。

### 持続性

  単純

### 例

      #include <rw/rwdate.h>
      #include <rw/rstream.h>

      main() {
        // 今日の日付
        RWDate d;

        // 前の日曜日の日付
        RWDate lastSunday = d.previous("Sunday");

        cout << d << endl << lastSunday << endl;
      }

  #### プログラム出力:

      03/22/91
      03/17/91

### 公開コンストラクタ

      RWDate();

    デフォルトのコンストラクタ。現在の日付で RWDate を作成します。

      RWDate(const RWDate&);

    コピーコンストラクタ。

      RWDate(unsigned day, unsigned year);

    指定された通年での日と年で RWDate を作成します。メンバー関数 `isValid()` を使用して、結果が正しい日付かどうかをテストできます。

      RWDate(unsigned day, unsigned month, unsigned year);

    指定された日と月と年で RWDate を作成します。日は 1 〜 31、月は 1 〜 12。年は 1990 や 90 と指定できます。メンバー関数 `isValid()` を使用して、結果が正しい日付かどうかをテストできます。

      RWDate(unsigned day, const char* mon, unsigned year,
             const RWLocale& locale = RWLocale::global());

    指定された日と月と年で RWDate を作成します。ロケール引数を使用して月名を変換します。"`C`" ロケールでは、日は 1 〜 31、月は January、JAN、Jan など、年は 1990 や 90 と指定できます。メンバー関数 `isValid()` を使用して、結果が正しい日付かどうかをテストできます。

      RWDate(istream& s,const RWLocale& locale =
             RWLocale::global());

    行全体を読み取り、ロケール引数によって日付に変換します。メンバー関数 `isValid()` を使用して、結果が正しい日付かどうかをテストしなければなりません。RWLocale は厳密に日付を検査できないので、この方法で作られた日付はユーザーが再検査する必要があります。

      RWDate(const RWCString& str,
             const RWLocale& locale = RWLocale::global());

    文字列 `str` を日付に変換します。メンバー関数 `isValid()` を使用して、結果が正しい日付かどうかをテストしなければなりません。RWLocale は厳密に日付を検査できないので、この方法で作られた日付はユーザーが再検査する必要があります。

      RWDate(const RWTime& t,
             const RWZone& zone = RWZone::local());

    RWTime から RWDate を作成します。タイムゾーンは指定がなければ現地時間になります。メンバー関数 `isValid()` を使用して、結果が正しい日付かどうかをテストしなければなりません。

      RWDate(const struct tm*);

    struct tm 引数のメンバー、`tm_year`、`tm_mon`、`tm_mday` の内容から RWDate を作成します。struct tm 内の月と年の番号付けは、RWDate と RWTime の番号付けとは異なります。struct tm は、標準インクルードファイル `<time.h>` で宣言されています。

      RWDate(unsigned long jd);

    ユリウス日の `jd` 番から日付を作成します。特定の地域用に、グレゴリオ暦の日付の初めより前の日を表す有効な RWDate を作成することが可能です。Rogue Wave では地域の特性については把握できないため、「有効性」のための恣意的な無効データの切り落としは行っていません。

### 公開メンバー演算子

      RWDate&
      operator=(const RWDate&);

    代入演算子。

      RWDate
      operator++();

    接頭インクリメント演算子。自分自身に 1 日を足し、その結果を返します。

      RWDate
      operator--();

    接頭デクリメント演算子。自分自身から 1 日を引き、その結果を返します。

      RWDate
      operator++(int);

    接尾インクリメント演算子。自分自身に 1 日を足し、初期値を返します。

      RWDate
      operator--(int);

    接尾デクリメント演算子。自分自身から 1 日を引き、初期値を返します。

      RWDate&
      operator+=(unsigned long s);

    自分自身に `S` 日を足し、その結果の自分自身を返します。

      RWDate&
      operator-=(unsigned long s);

    自分自身から `S` 日を引き、その結果の自分自身を返します。

### 公開メンバー関数

      RWCString
      asString(char format = 'x',
               const RWLocale& = RWLocale::global()) const;

    日付を、RWLocale 引数でフォーマットした文字列で返します。形式は、標準 C ライブラリ関数 `strftime()` で定義されています。

      RWCString
      asString(const char* format,
               const RWLocale& = RWLocale::global()) const;

    日付を、RWLocale 引数でフォーマットした文字列で返します。形式は、標準 C ライブラリ関数 `strftime()` で定義されています。

      RWBoolean
      between(const RWDate& a, const RWDate& b) const;

    RWDate が `a` 〜 `b` (両端を含む) の範囲にあれば、`TRUE` を返します。

      size_t
      binaryStoreSize() const;

    次の大域関数を使用してオブジェクトを格納する際に必要なバイト数を返します。

      RWFile& operator<<(RWFile&, const RWDate&);
      int
      compareTo(const RWDate* d) const;

    自分自身を `d` が指す RWDate と比較して、次の値を返します。

    0 | 自分自身が `*d` と等しい場合
    1 | 自分自身が `*d` より大きい場合
    -1 | 自分自身が `*d` より小さい場合

      unsigned
      day() const;

    この日付の年の通し日 (1 〜 366) を返します。

      unsigned
      dayOfMonth() const;

    この日付の月の通し日 (1 〜 31) を返します。

      void
      extract(struct tm*) const;

    `struct tm` 引数を完全に定義して (時間メンバーを 0 に、`tm_isdst` を -1 に設定して) 返します。`struct` `tm` で使用する月と曜日のコードは、RWDate で使用するコードとは異なります。日付が無効であれば、フィールドはすべて -1 に設定されます。

      unsigned
      firstDayOfMonth() const;

    RWDate の月の第 1 日目にあたる年の通し日 (1 〜 366) を返します。

      unsigned
      firstDayOfMonth(unsigned month) const;

    RWDate の年のある月 (1 〜 12) の第 1 日目にあたる年の通し日 (1 〜 366) を返します。

      unsigned
      hash() const;

    適切なハッシュ値を返します。

      RWBoolean
      isValid() const;

    正しい日付であれば `TRUE` を、そうでなければ `FALSE` を返します。

    次の 2 つの関数は、日付表現を直接操作したいユーザーへのサービスとして提供されます。julian day number は Julian date とは異なるので注意してください。ユリウス日数は、『Communications of the ACM』Volume 6、No.8 (1963 年 8 月)、444 ページの Algorithm 199 を使用して計算され、グレゴリオ暦の任意のグレゴリオ日付について有効です。グレゴリオ日付は 1752 年 9 月 14 日にはじめて紹介され、多くの地域で、さまざまな時代に採用されました。

      unsigned long
      julian() const;

    ユリウス日数の値を返します。

      void
      julian(unsigned long j);

    ユリウス日数の値を j に変換します。

      RWBoolean
      leap() const;

    RWDate がうるう年であれば、`TRUE` を返します。

      RWDate
      max(const RWDate& t) const;

    自分自身と `t` のうち、後の方の日付を返します。

      RWDate
      min(const RWDate& t) const;

    自分自身と `t` のうち、先の方の日付を返します。

      unsigned
      month() const;

    この日付の月 (1 〜 12) を返します。

      RWCString
      monthName(const RWLocale& = RWLocale::global()) const;

    オプションの RWLocale 引数に従って、この日付の月名を返します。

      RWDate
      next(unsigned dayNum) const;

    曜日を番号で表した場合の、次の日付を返します。月曜日が 1 で、日曜日が 7 で終わります。変数 `dayNum` は 1 〜 7 (両端を含む) の範囲になければなりません。

      RWDate
      next(const char* dayName,
           const RWLocale& = RWLocale::global()) const;

    次の `dayName` の日付を返します (たとえば、前の月曜日の日付)。曜日名は、RWLocale 引数で指定されます。

      RWDate
      previous(unsigned dayNum) const;

    直前の曜日を番号で示した日付を返します。月曜日が 1 から始まり、日曜日の 7 で終わります。変数 `dayNum` は 1 〜 7 (両端を含む) の範囲になければなりません。

      RWDate
      previous(const char* dayName,
               const RWLocale& = RWLocale::global()) const;

    直前の `dayName` の日付 (たとえば、前の月曜日の日付) を返します。曜日名は、RWLocale 引数で指定されます。

      RWCString
      weekDayName(const RWLocale& = RWLocale::global()) const;

    オプションの RWLocale 引数に従って、この日付の曜日名を返します。

      unsigned
      weekDay() const;

    この日付の曜日の番号を返します。月曜日が 1 から始まり、日曜日の 7 で終わります。

      unsigned
      year() const;

    この日付の年を返します。

### 静的公開メンバー関数

      static unsigned
      dayOfWeek(const char* dayName,
                const RWLocale& = RWLocale::global());

    指定した `dayName` に対応する曜日の番号を返します。月曜日が 1 から始まり、日曜日の 7 で終わります。曜日名と番号との対応は RWLocale 引数で分かります。一致するものがなければ、0 を返します。

      static unsigned
      daysInMonthYear(unsigned month, unsigned year);

    指定した年の指定された月の日数を返します。`month` が 1 と 12 までの数値でない場合はゼロを返します。

      static unsigned
      daysInYear(unsigned year);

    指定した年の日数を返します。

      static RWBoolean
      dayWithinMonth(unsigned monthNum, unsigned dayNum,
                     unsigned year);

    ある日 (1 〜 31) が指定した年の指定した月に入っていれば、`TRUE` を返します。

      static unsigned
      hash(const RWDate& d);

    `d.hash()` により返される `d` のハッシュ値を返します。

      static unsigned
      indexOfMonth(const char* monthName,

    指定した `monthName` に対応する月の番号 (1 〜 12) を返します。対応するものがなければ、0 を返します。

      static unsigned long
      jday(unsigned mon, unsigned day, unsigned year);

    指定した月 (1 〜 12)、日 (1 〜 31)、年に対応するユリウス日を返します。日付が無効であれば、ゼロを返します。

      static RWCString
      nameOfMonth(unsigned monNum,
                  const RWLocale& = RWLocale::global());

    指定したロケールでフォーマットした月 `monNum` の名前 (January = 1、December = 12) を返します。

      static RWBoolean
      leapYear(unsigned year);

    指定した年がうるう年ならば、`TRUE` を返します。

      static RWDate
      now();

    今日の日付を返します。

      static RWCString
      weekDayName(unsigned dayNum,
                  const RWLocale& = RWLocale::global());

    指定したロケールでフォーマットした曜日 `dayNum` の名前 (Monday = 1、Sunday = 7) を返します。

### 関連の大域演算子

      RWBoolean
      operator<(const RWDate& d1, const RWDate& d2);

    日付 `d1` が `d2` の前なら、`TRUE` を返します。

      RWBoolean
      operator<=(const RWDate& d1, const RWDate& d2);

    日付 `d1` が `d2` の前か `d2` と同じなら、`TRUE` を返します。

      RWBoolean
      operator>(const RWDate& d1, const RWDate& d2);

    日付 `d1` が `d2` の後なら、`TRUE` を返します。

      RWBoolean
      operator>=(const RWDate& d1, const RWDate& d2);

    日付 `d1` が `d2` の後か `d2` と同じなら、`TRUE` を返します。

      RWBoolean
      operator==(const RWDate& d1, const RWDate& d2);

    日付 `d1` が `d2` と同じなら、`TRUE` を返します。

      RWBoolean
      operator!=(const RWDate& d1, const RWDate& d2);

    日付 `d1` が `d2` と同じでないなら、`TRUE` を返します。

      RWDate
      operator+(const RWDate& d, unsigned long s);
      RWDate
      operator+(unsigned long s, const RWDate& d);

    日付 `d` から `s` 日後の日付を返します。

      unsigned long
      operator-(const RWDate& d1, const RWDate& d2);

    `d1` が `d2` より大きければ、`d1` 〜 `d2` 間の日数を返します。それ以外の場合は、実装により結果は異なります。

      RWDate
      operator-(const RWDate& d, unsigned long s);

    日付 `d` から `s` 日前の日付を返します。

      ostream&
      operator<<(ostream& s, const RWDate& d);

    ストリーム内のロケールに従って (RWLocale を参照してください)、それがなければ `RWLocale::global()` によって、`ostream s` に日付 `d` を出力します。

      istream&
      operator>>(istream& s, RWDate& t);

    `istream s` から `t` を読み取ります。行全体を読み取り、その中の文字列をストリーム内のロケール (RWLocale を参照してください) に従って、それがなければ `RWLocale::global()` によって変換します。関数 `RWDate::isValid()` を使用して、結果が正しい日付かどうかをテストする必要があります。

      RWvostream&
      operator<<(RWvostream&, const RWDate& date);
      RWFile&
      operator<<(RWFile&,     const RWDate& date);

    日付 `date` を仮想ストリームまたは `RWFile` に保存します。

      RWvistream&
      operator>>(RWvistream&, RWDate& date);
      RWFile&
      operator>>(RWFile&,     RWDate& date);

    仮想ストリームまたは RWFile から `date` に日付を復元し、`date` の以前の内容を書き換えます。