4.2 コンストラクタ

RWDate はいくつかの方法で生成できます。次にその例を示します。

  1. 現在の日付から RWDate を生成します。[1]

    RWDate d;

  2. 1 年のある日 (1 から 365) と年 (例えば 1989 または 89)で RWDate を生成します。クラスは 2 桁による指定にも対応していますが、西暦 2000 年以降のことを考慮に入れて、4 桁を使用することをお勧めします。

    RWDate d1(24, 2001); // 2001/1/24

    RWDate d2(24, 01); // 1901/1/24 (見分けがつかない!)

  3. 日 (1~31)、月 (1~12) および年で RWDate を生成します。

    RWDate d(10, 3, 2015); // 2015/3/10

  4. RWTime から RWDate を構築します。

    RWTime t;                                     // 現在の時刻
    RWDate d(t);
    

さらに、言語特有の文字列を使って日付を構築することもできます。指定がない場合は、アメリカの規則と名前を使用します。

RWDate d1(10, "June", 2001);                         // 2001/6/10
RWDate d2(10, "JUN", 2001);                          // 2001/6/10

例えば、フランス語の月名を使用する必要があるとします。使用システムがフランス語に対応していると仮定し、以下にどのようにするかを示します。

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

main()
{
  RWLocaleSnapshot us("C");
  RWLocaleSnapshot french("fr");       // あるいはコンパイラが指定する値 // 1

  RWCString americanDate("10 June 2025");
  RWCString frenchDate("10 Juin 2025");

  RWDate d(frenchDate, french);        // OK                 // 2

  cout << frenchDate << ((d.isValid()) ? " IS " : " IS NOT ")
       << "a valid date (french locale)." << endl << endl;

  RWDate bad = RWDate(frenchDate);                           // 3
  cout << frenchDate;
  cout << ((bad.isValid() && bad == d) ? " IS " : " IS NOT ")
       << "a valid date (default locale)." << endl << endl;

  bad = RWDate(americanDate, french);                        // 4
  cout << americanDate;
  cout << ((bad.isValid() && bad == d) ? " IS " : " IS NOT ")
       << "a valid date (french locale)." << endl << endl;

  cout << d << endl;                                         // 5
  cout << d.asString() << endl;                              // 6
  cout << d.asString('x', french) << endl;                   // 7

  return 0;
}

次にコードの説明を行ごとに示します。

  1. 言語 fr のスナップショットを撮ります。これは、使用システムがその言語に対応していることを前提にしています。この言語の別の一般名は fr_FR です。

  2. コンストラクタを使って日付を生成します。

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

    2 番目の引数である month は、フランス語環境を使用している場合に限り意味があります。この場合、// 1 の行で生成された言語を使用しています。結果は、2002 年 6 月 10 日という日付です。

  3. デフォルト言語 (この場合は英語) を使って同じ日付を生成します。この言語は C 形式に従ったものだけを認識します。つまり、10 Juin 2002 という日付は C 形式に従っていないので、意味を成しません。念のため、周知の有効な日付と比較します。

  4. 同じ理由で、フランス語の設定でアメリカ名を使った日付を生成することも失敗するはずです。念のため、周知の有効な日付と比較します。

  5. // 2 で生成された日付がデフォルト言語、つまりアメリカの日付形式を使用して表示されます。結果は次のようになります。

    06/10/25

  6. 日付は文字列に変換され、表示されます。ここでは再び、デフォルト言語が使用されます。やはり同じ結果になります。

    06/10/25

  7. 今回は // 1 の行で指定した言語を使用して、日付が文字列に変換されます。[Kaori1][2]

    10.06.25

注釈

  1. ^ RWDate のデフォルトコンストラクタは今日の日付を代入するため、 RWDate の大規模な配列を生成するのには時間がかかる場合があります。これが問題になる場合は、より速いコンストラクタを持つ RWDate から派生したクラスで配列を宣言するか、RWTValOrderedVector<RWDate> を使用します。
  2. ^ お使いのシステムの言語により、表示のフォーマットが決まります。

この記事の投稿者: επιστημη