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

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_yeartm_montm_mday の内容から RWDate を作成します。struct tm 内の月と年の番号付けは、RWDateRWTime の番号付けとは異なります。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;

RWDateab (両端を含む) の範囲にあれば、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);

日付 d1d2 の前なら、TRUE を返します。

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

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

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

日付 d1d2 の後なら、TRUE を返します。

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

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

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

日付 d1d2 と同じなら、TRUE を返します。

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

日付 d1d2 と同じでないなら、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);

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

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 の以前の内容を書き換えます。