C#での日時・時間の設定・取得をできるDateTime構造体についてまとめた。
DateTimeに値を設定する
DateTimeには、
・年
・月
・日
・時
・分
・秒
・1/1000秒(ミリセカンド)
の値をセットすることができる
var date1 = new DateTime(2007, 7, 7);
DateTime date2 = new DateTime(2011, 1, 1, 11, 3, 5);
var date3 = new DateTime(2000, 1, 1, 12, 24, 36, 123);
7/7/2007 12:00:00 AM // date1
1/1/2011 11:03:05 AM // date2
1/1/2000 12:24:36 PM // date3
○年月日をセットすると、「セットした年月日 + 時間は午前12時」を返す。
○年月日と時分秒をセットすると、「セットした年月日 + セットした時分秒」を返す。
※時間は24時間単位でセットするのだが、返ってくる値は、「12時間単位 + AMかPM」
(例)
時→9、分→5、秒→1
なら、「9:05:01 AM」というように返ってくる。
なぜか、時だけ、0埋めされない。
そして、ミリセカンドはセットしても、時間には表示されない。
また、時分秒を入れる場合は、全部セットしないといけない。
不思議なのが、年月日だけ日、月、年の順で表示される。
var date3 = new DateTime(2007, 7, 7, 1); // 分と秒がセットされていない
var date4 = new DateTime(2007, 7, 7, 1, 1); // 秒がセットされていない
「今」と「今日」を取得する場合は特殊
var now = DateTime.Now;
var today = DateTime.Today;
7/28/2021 9:51:57 PM // now
7/28/2021 12:00:00 AM // Today
Nowの場合、今の日付と今の時間を返す。
Todayの場合、今の日付を返すが、時間は「12:00:00 AM」を返す。
DateTime構造体のプロパティ
DateTime構造体はいくつかプロパティを持っている。
var date3 = new DateTime(2000, 1, 1, 12, 24, 36, 123);
date5.Year; // 年 2000
date5.Month; // 月 1
date5.Day; // 日 1
date5.Hour; // 時 12
date5.Minute; // 分 24
date5.Second; // 秒 36
date5.Millisecond; // 1/1000秒 123
ただし、上記のプロパティは読み取り専用なので、値を書き換えることはできない。
date5.Hour = 21;
「CS0200: Property or indexer 'DateTime.XXXX' cannot be assigned to -- it is read only (CS0200) (xxxxxxxxxxx)」という「読み取り専用の値は変更ができない」といった旨の構文エラーになる。
曜日を取得する
date3.DayOfWeek; // Saturday
曜日は英語で返ってくる。
うるう年かどうかを判定する
なんと、C#の日時操作には、年がうるう年かどうかを判定するメソッドがある。
DateTime.IsLeapYear(2016); // True
DateTime.IsLeapYear(2018); // False
文字列からDateTimeのオブジェクトを作成する
この場合は、DateTime構造体に含まれている静的メソッドであるTryParseを使用する。
また、TryParseメソッドで値が変換されれば、Trueが返り、変換ができないと例外が発生する。
第一引数に変換する日時の文字列、第二引数にoutキーワード付きのDateTime型の変数を指定する。
Console.WriteLine(date2);
// この時点では、「1/1/2011 11:03:05 AM」が返ってくる
// date2はDateTime型なので、変換され、Trueが返るので条件を満たす。
if(DateTime.TryParse("2020/1/1 14:15:30", out date2)) {
Console.WriteLine(date2);
// この時点で、「2020/1/1 2:15:30 PM」が返ってくる
}
1/1/2011 11:03:05 AM
1/1/2020 2:15:30 PM
DateTime型の変数をフォーマットを指定して文字列に変換する
var date3 = new DateTime(2000, 1, 1, 12, 24, 36);
date3.ToString("d"); // 1/1/2000
date3.ToString("D"); // Saturday, January 1, 2000
date3.ToString("yyyy-MM-dd") // 2000-01-01
date3.ToString("yyyy年MM月dd日(ddd)"); // 2000年01月01日(Sat)
date3.ToString("HH時mm分ss秒"); // 12時24分36秒
date3.ToString("f"); // Saturday, January 1, 2000 12:24 PM
date3.ToString("F"); // Saturday, January 1, 2000 12:24:36 PM
date3.ToString("t"); // 12:24 PM
date3.ToString("T"); // 12:24:36 PM
※フォーマットについてはいろいろある。
参考文献