C# - DateTime 構造体
初めに
C# では、日時を表すための型として、DateTime 構造体が用意されています。本記事では、DateTime 構造体の基本的な使い方を簡単にまとめます。
Index
コンストラクターの呼び出し
コンストラクターを呼び出す場合、さまざまな呼び出し方ができます。よく使う例をいくつか紹介します。
(例1:引数なし)
デフォルトコンストラクタを使用すると、年、月、日、時、分、秒のすべてが最小値であるDateTimeオブジェクトが作成されます。
DateTime dat1 = new DateTime(); Console.WriteLine(dat1); // 結果: 0001/01/01 00:00:00
(例2:年、月、日)
DateTime date1 = new DateTime(2023, 7, 1); Console.WriteLine(date1); // 結果: 2023/07/01 00:00:00
(例3:年、月、日、時、分、秒)
DateTime date2 = new DateTime(2023, 7, 1, 12, 30, 45); Console.WriteLine(date2); // 結果: 2023/07/01 12:30:4
(例4:年、月、日、カレンダー)
Calendar japaneseCalendar = new JapaneseCalendar(); //JapaceneCalenderクラスのインスタンスを作成 DateTime date3 = new DateTime(2023, 7, 1, japaneseCalendar); //引数に年月日とカレンダーを指定 Console.WriteLine(date3); // 結果: 令和5年7月1日 00:00:00
基本的な使い方
現在の日時を取得
Now を使うことで、コンピュータ上の現在の日時を現地時間で表した DateTimeを取得します。
// 現在の日付と時刻を取得 DateTime now = DateTime.Now; Console.WriteLine("現在の日付と時刻: " + now);
日時の要素にアクセス
Year、Month、Day など DateTime にあるプロパティを使うことで、年月日などにアクセスできます。
DateTime now = DateTime.Now; int year = now.Year; //年 int month = now.Month; //月 int day = now.Day; //日付 int hour = now.Hour; //日付の時間の部分 int minute = now.Minute; //日付の分の部分 int second = now.Second; //日付の秒の部分 int millisecond = now.Millisecond; //日付のミリ秒の部分 DayOfWeek dayOfWeek = now.DayOfWeek; //曜日 DateTimeKind kind = now.Kind; //時刻の種類 (現地時刻、世界協定時刻 (UTC)、または、そのどちらでもない)
日付の比較
不等号を用いて、日付の比較ができます。
DateTime date1 = new DateTime(2023, 7, 1); DateTime date2 = new DateTime(2023, 7, 15); if (date1 < date2) { Console.WriteLine("date1はdate2よりも前の日付です。"); }
日付や時間の演算
Add メソッドを用いて、日付や時間を加算または減算することができます。
DateTime now = DateTime.Now; // 1年後の日付を取得 DateTime futureDate = now.AddYears(1); // 1か月前の日付を取得 DateTime pastDate = now.AddMonths(-1); // 1週間後の日付を取得 DateTime futureDate2 = now.AddDays(7); // 1時間後の時刻を取得 DateTime futureTime = now.AddHours(1); // 30分前の時刻を取得 DateTime pastTime = now.AddMinutes(-30); // 10秒後の時刻を取得 DateTime futureTime2 = now.AddSeconds(10);
TimeSpan 構造体
TimeSpan 構造体は時間間隔を表す構造体です。DateTime の減算により、TimeSpanオブジェクトを受け取ることができます。
DateTime date1 = new DateTime(2023, 6, 1); DateTime date2 = new DateTime(2023, 6, 15); // 日付の差分を計算 TimeSpan diff = date2 - date1; Console.WriteLine("日付の差分: " + diff.Days + "日");
DateTime 同士の加算はできません。Add メソッドを使いましょう。
日付のフォーマットの変更
ToString() を使うときに、日付のフォーマットを指定することができます。
DateTime now = DateTime.Now; string formattedDate = now.ToString("yyyy/MM/dd"); Console.WriteLine("フォーマット変更後の日付: " + formattedDate);
(フォーマットの例)
フォーマット | 説明 | 例 |
---|---|---|
"yyyy/MM/dd" | 年(4桁)/月(2桁)/日(2桁) | 2023/07/01 |
"yyyy/MM/dd (ddd)" | 年(4桁)/月(2桁)/日(2桁) (曜日の省略形) | 2023/07/01 (土) |
"yyyy/MM/dd HH:mm:ss" | 年(4桁)/月(2桁)/日(2桁) 時間(24時間制):分:秒 | 2023/07/01 15:03:58 |
"yyyy/MM/dd HH:mm:ss tt" | 年(4桁)/月(2桁)/日(2桁) 時間(12時間制):分:秒 AM/PM | 2023/07/01 15:03:58 午後 |
日付のフォーマットに使われる yyyy のような表現は下のドキュメントに詳細が説明してあります。
learn.microsoft.com