C# DateTime型にNullをセットする方法

こんにちは、トミセン(@tomisenblog)です。

C#プログラムでは必ず使うDateTimeですが、

「DateTime型の初期化ってどうやるの?」
「DateTime型って、nullが入らないんだけど・・・」

分かってしまえば簡単なんですが、簡単なことほど情報を見つけるのに苦労しがちで、思ったより時間がかかってしまいますよね。

今回はそんなお悩みを解決します。ずばり!
C# DateTime型にNullをセットする方法」についてご紹介します。

それでは一緒に学んでいきましょう!

この記事がおすすめな人
  • DateTime型を初期化する方法について知りたい
  • DateTime型にNullをセットする方法を知りたい
目次

DateTime型とは?

DateTimeは構造体

DateTimeは、日付や時刻を扱うときにメインで使われますが、意外に分かっていないで使ってしまっていることが多いです。

なぜなら、DateTimeはクラスではなくて構造体(struct キーワードを使って定義した型)だからです。つまり値型になります。

値型について、少し確認しておきましょう。

ポイント

  • 値型 :構造体→nullにできない
  • 参照型:クラス・配列→nullにできる

参照型では、null という状態(無効な値、参照先が無い、実体が無いような状態)を表すことができますが、値型ではそれができません。

そのため、値型であるDateTimeにNullをセットしようとすると”Null 非許容の値型であるため、Null を ‘DateTime’に変換できません”とエラーになります。

C# datetime null

 

DateTimeについてMicrosoftのサイトに詳しい解説があります。興味がある方は「DateTime 構造体|Microsoft Docs」をどうぞ。

次は、「DateTime型を初期化する方法」を解説します。

DateTime型を初期化する方法は?

MaxValue、MinValueで初期化する

DateTime.MaxValue、またはDateTime.MinValueを使って初期化をします。

実際のコードはこちらになります。

DateTime maxDate = DateTime.MaxValue;
Console.WriteLine($"MaxValue:{maxDate}");

// 【実行結果】
// MaxValue:9999/12/31 23:59:59


DateTime minDate = DateTime.MinValue;
Console.WriteLine($"MinValue:{minDate}");

// 【実行結果】
// MinValue:0001/01/01 0:00:00

DateTime.MinValueは「9999/12/31 23:59:59」、DateTime.MinValueは「0001/01/01 0:00:00」がセットされて、DateTimeが初期化されます。

MaxValueで初期化したDateTimeを早速使ってみます。

if(maxDate == DateTime.MaxValue)
{
    // nullと同様の処理
}

通常の入力で「9999/12/31 23:59:59」という日付が入ってくることはほとんどないと思います。

そのため一応問題はないのですが、この方法は開発メンバーがきちんとルールを共有できないと思わぬエラーや仕様的なバグの元になる可能性があります。

いよいよ、「DateTime型にNullをセットする方法」です。

DateTime型にNullをセットする方法は?

null許容型(Nullable)を使う

null許容型(Nullable)を使って初期化をします。

実際のコードはこちらになります。

DateTime? date = null;

Nullable<DateTime> date2 = null;

DateTime?Nullable<DateTime>は、同じnull 許容型のDateTimeの意味になるので、どちらの書き方でも大丈夫です。

Visual Studioでも、エラーが出ていないことを確認しておきましょう。

C# datetime null

 

変数を使っていない警告の緑の波線は出ていますが、エラーは0件でエラー一覧にも出ていません。

以上で「C# DateTime型にNullをセット」することができました!!

null 許容型については、こちらの記事で解説しています。興味がある方はどうぞ。

あわせて読みたい
【C#】Nullable<T>型をキャストする方法 「Nullable<T>型(null 許容型)って、どうやってnull非許容型にするの?」 「Nullableからのキャストって、簡単にできないよね?」 こんなことを悩んでいません...

まとめ

DateTimeの操作って、簡単なようで結構難しいポイントもあると思います。初心者プログラマを脱出するためにも、ぜひクリアして欲しいポイントです。

初心者プログラマがスキルアップするための方法については、こちらの記事で解説しています。興味のある方は「初心者プログラマがスキルアップするための方法」の記事をどうぞ。

DateTimeについてもっと詳しく知りたい方は、「【C#】DateTime.Dateで日付部分だけ取得」の記事も参考になると思います。

それでは、また。

こちらの記事も読まれています!


よかったらシェアしてね!
目次
閉じる