こんにちは、トミセン(@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’に変換できません”とエラーになります。
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でも、エラーが出ていないことを確認しておきましょう。
変数を使っていない警告の緑の波線は出ていますが、エラーは0件でエラー一覧にも出ていません。
以上で「C# DateTime型にNullをセット」することができました!!
null 許容型については、こちらの記事で解説しています。興味がある方はどうぞ。
まとめ
DateTimeの操作って、簡単なようで結構難しいポイントもあると思います。初心者プログラマを脱出するためにも、ぜひクリアして欲しいポイントです。
初心者プログラマがスキルアップするための方法については、こちらの記事で解説しています。興味のある方は「初心者プログラマがスキルアップするための方法」の記事をどうぞ。
DateTimeについてもっと詳しく知りたい方は、「【C#】DateTime.Dateで日付部分だけ取得」の記事も参考になると思います。
それでは、また。
こちらの記事も読まれています!
- 【C#】DateTime.Dateで日付部分だけ取得
- プログラマーがエクセルを使えないって、まずい?
- IT業界に強いエンジニアのための転職サイト・転職エージェント3選
- 未経験でプログラマーになったけど辞めたい!どうするべき?