[C#][Windows Formsアプリ][DateTimePicker] Valueプロパティで現在選択されている日付・時刻を扱う

スポンサーリンク

はじめに

Windows Forms の DateTimePicker コントロールで、
「今、ユーザーがどの日付・時刻を選んでいるか」 を扱う中心となるのが Value プロパティです。
DB に保存するときも、画面初期表示をセットするときも、まず触るのはこの Value と言っていいくらい大事なプロパティです。

💡 一言でいうと:
Value は DateTimePicker の「現在値(DateTime 型)」を表すプロパティ
と覚えておくとOKです。

 

Value プロパティとは?

プロパティ名 役割
Value DateTime DateTimePicker で現在選択されている日付・時刻

Value の型は System.DateTime です。
Text プロパティのような文字列ではなく、「日時」として扱えるので、
日付計算や比較にもそのまま利用できます。

 

現在選択されている日付・時刻を取得する

一番よく使うのは、ユーザーが選んだ日付を取得して、
ラベルに表示したり、データベースに保存したりするパターンです。

// 現在選択されている日付を取得
DateTime selectedDate = dateTimePicker1.Value;

// 文字列として表示
label1.Text = selectedDate.ToString("yyyy/MM/dd");

もちろん、時刻も含めて扱えます。

// 時刻まで含めた表示
label2.Text = selectedDate.ToString("yyyy/MM/dd HH:mm:ss");
📝 補足:表示書式は Value ではなく ToString() のフォーマット文字列でコントロールします。

 

初期値(既定の日時)を設定する

フォーム表示時に、「今日の日付」「締切日」「契約開始日」など、
あらかじめ意味のある日付をセットしておくと、ユーザーが楽になります。

フォームのコンストラクタや Load イベントで設定する例

public Form1()
{
    InitializeComponent();

    // フォーム表示時の初期日付を「今日」に設定
    dateTimePicker1.Value = DateTime.Today;

    // あるいは任意の日付
    dateTimePicker1.Value = new DateTime(2025, 12, 31);
}

DateTime.Today は「今日の日付(時刻は 0:00)」、
DateTime.Now は「現在の日時(時刻を含む)」を表します。

 

MinDate / MaxDate と Value の関係

DateTimePicker には、選択可能な日付の範囲を制限するための
MinDate / MaxDate プロパティがあります。

  • MinDate … 選択できる最小日付
  • MaxDate … 選択できる最大日付

Value に設定する日時は、必ずこの範囲内である必要があります。

範囲を設定してから Value を設定する例

// 過去1年〜未来1年 の範囲に制限
dateTimePicker1.MinDate = DateTime.Today.AddYears(-1);
dateTimePicker1.MaxDate = DateTime.Today.AddYears( 1);

// 初期値を今日に
dateTimePicker1.Value   = DateTime.Today;
⚠ 範囲外の Value をセットしようとすると、例外(ArgumentOutOfRangeException)が発生します。
「先に MinDate / MaxDate を設定」→「その範囲内の Value を設定」の順で書くのが安全です。

 

ShowCheckBox / Checked との組み合わせ(NULL 相当の扱い)

業務アプリでは「日付は任意(NULL でもよい)」というケースも多いです。
DateTimePicker の Value は DateTime 型なので、直接 NULL を入れることはできません。
その代わりに使うのが ShowCheckBoxChecked です。

  • ShowCheckBox = true で、チェックボックス付き DateTimePicker にする
  • Checkedfalse のときは「未選択」とみなす、というルールを自分で決める

例:NULL 相当の扱いをする

// 初期表示:未選択状態に見せる
dateTimePicker1.ShowCheckBox = true;
dateTimePicker1.Checked      = false;
dateTimePicker1.Value        = DateTime.Today; // 内部的には何か入れておく

// 保存時の処理例
DateTime? deadline = null;
if (dateTimePicker1.Checked)
{
    deadline = dateTimePicker1.Value; // チェックされているときだけ有効
}

このように、実データとしては DateTime?(Nullable<DateTime>)を使い、
画面側では Checked の ON/OFF で NULL 相当を表現するのがよくあるパターンです。

 

Value と Format / CustomFormat の関係

DateTimePicker は、表示形式を Format プロパティで切り替えられます。

  • Format = DateTimePickerFormat.Short … 「2025/11/24」などの日付だけ
  • Format = DateTimePickerFormat.Long … 「2025年11月24日月曜日」など
  • Format = DateTimePickerFormat.Time … 「13:45」などの時刻
  • Format = DateTimePickerFormat.Custom … 自分で書式を指定

**重要なのは**、表示形式が変わっても Value 自体は常に `DateTime` だということです。

CustomFormat 例

dateTimePicker1.Format       = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "yyyy/MM/dd (ddd) HH:mm";
dateTimePicker1.Value        = DateTime.Now;

画面上の見え方は変わりますが、Value からはいつでも DateTime として日時が取得できます。

 

よくあるパターンとサンプルコード

期間入力(開始日・終了日)のチェック

private void buttonSave_Click(object sender, EventArgs e)
{
    DateTime start = dateTimePickerStart.Value;
    DateTime end   = dateTimePickerEnd.Value;

    if (end < start)
    {
        MessageBox.Show("終了日は開始日以降を指定してください。");
        return;
    }

    // 保存処理…
}

日付の前後関係は、Value 同士の大小比較で簡単に判定できます。

「今日ボタン」で現在日時に戻す

private void buttonToday_Click(object sender, EventArgs e)
{
    dateTimePicker1.Value = DateTime.Today;
}

時刻だけを扱いたい場合

// 時刻入力用の設定
dateTimePicker1.Format       = DateTimePickerFormat.Time;
dateTimePicker1.ShowUpDown   = true;        // スピンボックス風
dateTimePicker1.Value        = DateTime.Now;

// 保存時は Value.TimeOfDay などで時刻成分だけ使うことも可能
TimeSpan selectedTime = dateTimePicker1.Value.TimeOfDay;

 

ありがちなハマりポイント

  • MinDate / MaxDate の範囲外をセットして例外
    → 必ず範囲を先に設定し、その範囲内の Value を指定しましょう。
  • NULL を直接入れられない
    → Nullable<DateTime> と Checked / ShowCheckBox を組み合わせて設計します。
  • ユーザーが日付を変えたタイミングを知りたい
    ValueChanged イベントを使います。Value の記事とセットで覚えておくと便利です。
  • 表示形式を変えても、Value そのものは変わらない
    → 見た目は Format / CustomFormat、実データは Value で分離して考えましょう。

 

まとめ

  • Value は DateTimePicker の「現在選択されている日付・時刻」を表す、最重要プロパティ。
  • 型は DateTime で、日付計算・比較にそのまま使える。
  • MinDate / MaxDate の範囲外は指定不可。
  • NULL 相当の扱いは ShowCheckBox / Checked と Nullable<DateTime> で工夫する。
  • 表示形式は Format / CustomFormat、値そのものは Value と役割分担して考える。

まずは「ユーザーが選んだ日付をどう受け取るか」「どう初期値をセットするか」から、
たくさん Value を触って慣れていきましょう。
次のステップとしては、ValueChanged イベント と組み合わせた「選択変更時の処理」もぜひ押さえておくと、実用的な画面が一気に作りやすくなります。

Please follow and like us:

コメント

タイトルとURLをコピーしました