[永久保存版][C#] 日付型の基礎:DateTime構造体の徹底解説

スポンサーリンク

はじめに

C#での日付処理は、様々な場面で必要になる基本的かつ重要な要素です。その中心にあるのがDateTime構造体です。この構造体を使いこなすことで、日付や時刻に関する様々な操作が可能になります。今回は、DateTimeの基本的な使い方、プロパティ、メソッドについて徹底解説し、日付処理の基礎をしっかりと身につけましょう。

DateTime とは?

DateTimeは、C#における日付と時刻を表す構造体です。年月日、時刻、タイムゾーン情報などを保持し、様々な操作が可能です。タイムゾーンを持たないDateTimeと、タイムゾーンを持つDateTimeOffsetがC#ではよく使用されますが、この記事では、基本となるDateTimeに焦点を当てて解説します。

DateTimeは、時間の単位を”ティック”(1ティックは100ナノ秒)で管理しており、非常に高精度な日付・時間の計算が可能です。

DateTimeの基本的な生成方法

DateTimeを生成するには、いくつかの方法があります。最も一般的なのは、以下のように年月日や時刻を指定してインスタンスを作成する方法です。

DateTime specificDate = new DateTime(2024, 10, 7);  // 2024年10月7日の日時を生成
DateTime fullDateTime = new DateTime(2024, 10, 7, 14, 30, 0);  // 2024年10月7日 14:30:00の日時を生成

また、現在の日時を取得する場合には、DateTime.Nowを使用します。

DateTime now = DateTime.Now;  // 現在のローカル日時を取得

UTC時間(協定世界時)を取得したい場合には、DateTime.UtcNowを使います。

DateTime utcNow = DateTime.UtcNow;  // 現在のUTC日時を取得

 

DateTimeのプロパティ

DateTimeには、日付や時刻に関する様々なプロパティが用意されています。主なプロパティは以下の通りです。

Year: 年を取得します

int year = specificDate.Year;  // 2024

Month: 月を取得します

int month = specificDate.Month;  // 10

Day: 日を取得します

int day = specificDate.Day;  // 7

Hour: 時を取得します

int hour = fullDateTime.Hour;  // 14

Minute: 分を取得します

int minute = fullDateTime.Minute;  // 30

Second: 秒を取得します

int second = fullDateTime.Second;  // 0

 

日時の加算・減算

DateTimeには、日付や時刻を簡単に加算・減算できるメソッドがいくつか用意されています。代表的なものは以下の通りです。

AddDays: 指定した日数を加算します。

DateTime nextWeek = now.AddDays(7);  // 1週間後の日付を取得

AddMonths: 指定した月数を加算します。

DateTime nextMonth = now.AddMonths(1);  // 1か月後の日付を取得

AddYears: 指定した年数を加算します。

DateTime nextYear = now.AddYears(1);  // 1年後の日付を取得

Subtract: ほかの日付との差分を計算します。

TimeSpan difference = specificDate.Subtract(now);  // 特定の日付と現在日時の差分を取得

 

日付の比較

DateTimeのインスタンス同士を比較する方法も非常に簡単です。以下のような比較方法があります。

Equals: 日付が等しいかを比較します。

bool isEqual = specificDate.Equals(fullDateTime);  // false

Compare: 日付を比較し、前後関係を判定します。

int comparison = DateTime.Compare(specificDate, fullDateTime);
if (comparison < 0) 
    Console.WriteLine("specificDateがfullDateTimeよりも前です。"); 
else if (comparison > 0)
    Console.WriteLine("specificDateがfullDateTimeよりも後です。");
else
    Console.WriteLine("同じ日付です。");

 

日付のフォーマット

DateTimeを文字列として表示する際に、特定のフォーマットで表示したい場合には、ToStringメソッドを使います。標準のフォーマットやカスタムフォーマットを使用できます。

標準フォーマット:

string formattedDate = now.ToString("yyyy-MM-dd");  // 2024-10-07

カスタムフォーマット:

string customFormattedDate = now.ToString("dddd, dd MMMM yyyy HH:mm:ss");  // "Monday, 07 October 2024 14:30:00"

 

曜日と年の経過日数を扱うプロパティ:DayOfWeekとDayOfYear

C#のDateTime構造体には、日付に関連する追加の便利なプロパティとして、曜日年の経過日数を取得するためのプロパティが用意されています。

DayOfWeek

DayOfWeekは、DateTimeが表す日付の曜日を取得します。戻り値はDayOfWeek列挙型で、日曜日が0、土曜日が6に対応します。

DayOfWeek dayOfWeek = specificDate.DayOfWeek;  // Monday

これを文字列形式で表示することも可能です。

string dayOfWeekString = specificDate.DayOfWeek.ToString();  // "Monday"

DayOfYear

DayOfYearは、その年の1月1日から指定の日付までの経過日数を表します。このプロパティを使うと、年の経過日数を簡単に取得できます。

int dayOfYear = specificDate.DayOfYear;  // 281 (2024年10月7日は、2024年の281日目)

これにより、特定の日付がその年の何日目かを確認することができ、特定のスケジュールや経過日数の計算に便利です。

まとめ

この記事では、C#のDateTime構造体について、基本的な使い方から、日付の加算・減算、比較、フォーマット、さらにDayOfWeekDayOfYearといった便利なプロパティまで幅広く解説しました。これらの知識を活用して、実際のプロジェクトで正確かつ柔軟な日時処理を行いましょう。

次回は、DateTimeDateTimeOffsetの違いについてさらに深堀りしていきます。タイムゾーンやUTCに関連する処理が必要な方は、そちらもぜひご覧ください。

Please follow and like us:

コメント

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