DateTimeオブジェクトと日時要素
C#においてDateTime構造体は、日付(2025年11月13日)と時刻(15時30分45秒)を一つのオブジェクトとして保持しています。
プログラムを開発していると、このDateTimeオブジェクト全体としてではなく、「月だけを取得して比較したい」、「時間だけを取り出してログに出力したい」、「曜日を判定したい」といったように、特定の日時要素(コンポーネント)だけを個別に取得したい場面が数多くあります。
DateTime構造体は、これらの要素にアクセスするための読み取り専用プロパティを多数提供しています。
主要な日時プロパティ
DateTimeオブジェクトが保持する主要な日時要素は、int(整数)型のプロパティとして直接アクセスできます。
| プロパティ名 | 型 | 説明 |
Year | int | 年(例: 2025) |
Month | int | 月(1 ~ 12) |
Day | int | 日(1 ~ 31) |
Hour | int | 時(0 ~ 23)(24時間表記) |
Minute | int | 分(0 ~ 59) |
Second | int | 秒(0 ~ 59) |
Millisecond | int | ミリ秒(0 ~ 999) |
コード例:各プロパティの取得
DateTimeオブジェクト(ここではlogTimestamp)を作成し、そこから各プロパティの値を取り出して出力する例です。
using System;
public class DateTimeComponentsExample
{
public static void Main()
{
// 取得対象の日時オブジェクトを作成
// (2025年11月13日 15時30分45秒 123ミリ秒)
DateTime logTimestamp = new DateTime(2025, 11, 13, 15, 30, 45, 123);
Console.WriteLine($"元のDateTime: {logTimestamp:O}"); // ISO 8601 形式で表示
Console.WriteLine("--- 各コンポーネントの取得 ---");
// 各プロパティにアクセス (すべて int 型)
int yearValue = logTimestamp.Year;
int monthValue = logTimestamp.Month;
int dayValue = logTimestamp.Day;
int hourValue = logTimestamp.Hour;
int minuteValue = logTimestamp.Minute;
int secondValue = logTimestamp.Second;
int millisecondValue = logTimestamp.Millisecond;
// 結果の出力
Console.WriteLine($"年 (Year): {yearValue}");
Console.WriteLine($"月 (Month): {monthValue}");
Console.WriteLine($"日 (Day): {dayValue}");
Console.WriteLine($"時 (Hour): {hourValue}");
Console.WriteLine($"分 (Minute): {minuteValue}");
Console.WriteLine($"秒 (Second): {secondValue}");
Console.WriteLine($"ミリ秒 (Millisecond): {millisecondValue}");
}
}
出力結果:
元のDateTime: 2025-11-13T15:30:45.1230000
--- 各コンポーネントの取得 ---
年 (Year): 2025
月 (Month): 11
日 (Day): 13
時 (Hour): 15
分 (Minute): 30
秒 (Second): 45
ミリ秒 (Millisecond): 123
その他の便利なプロパティ
上記7つの主要なプロパティ以外にも、DateTimeは便利なプロパティを提供しています。
Date プロパティ
Dateプロパティは、元のDateTimeオブジェクトから時刻情報(時・分・秒)をすべて切り捨てた(00:00:00にした)、日付部分のみを表す新しいDateTimeオブジェクトを返します。
DateTime.Todayが「今日の午前0時」を返すのに対し、someDateTime.Dateは「その日時の午前0時」を返します。
DateTime logTimestamp = new DateTime(2025, 11, 13, 15, 30, 45);
// .Date プロパティを使用
DateTime dateOnly = logTimestamp.Date;
Console.WriteLine($"元の時刻: {logTimestamp}"); // 15:30:45
Console.WriteLine($"Dateプロパティ: {dateOnly}"); // 00:00:00
出力結果:
元の時刻: 2025/11/13 15:30:45
Dateプロパティ: 2025/11/13 0:00:00
DayOfWeek プロパティ
DayOfWeekプロパティは、その日付の「曜日」をDayOfWeek列挙型(Sunday, Mondayなど)として返します。
DateTime logTimestamp = new DateTime(2025, 11, 13); // 2025年11月13日
DayOfWeek weekDay = logTimestamp.DayOfWeek;
Console.WriteLine($"日付: {logTimestamp:yyyy/MM/dd}");
Console.WriteLine($"曜日 (DayOfWeek): {weekDay}"); // Thursday
// 曜日で条件分岐が可能
if (weekDay == DayOfWeek.Saturday || weekDay == DayOfWeek.Sunday)
{
Console.WriteLine("週末です。");
}
else
{
Console.WriteLine("平日です。");
}
出力結果:
日付: 2025/11/13
曜日 (DayOfWeek): Thursday
平日です。
まとめ
DateTimeオブジェクトは、一見複雑なデータ構造に見えますが、.Yearや.Month、.Hourといった直感的な名前のプロパティを通じて、必要な日時要素(コンポーネント)にint型として簡単にアクセスできます。
これらのプロパティを利用することで、「特定の月だけを集計する」や「特定の時間帯のログを抽出する」といった操作を容易に実装できます。
