ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

C# - DateTime 構造体

初めに

 C# では、日時を表すための型として、DateTime 構造体が用意されています。本記事では、DateTime 構造体の基本的な使い方を簡単にまとめます。

コンストラクターの呼び出し

 コンストラクターを呼び出す場合、さまざまな呼び出し方ができます。よく使う例をいくつか紹介します。

(例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

learn.microsoft.com

基本的な使い方

現在の日時を取得

 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