DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

日時(DateTimeオブジェクト)の情報を取得する

ここでは、日時を表したDateTimeオブジェクトから、年、月、日、時、分、秒などの情報を取得する方法を説明します。つまりは、DateTime構造体のプロパティの説明をしているだけです。

補足:DateTimeのプロパティは読み取り専用で、値の設定はできません。プロパティの値を変更したい場合は、新たにDateTimeオブジェクトを作成します。その方法は、「指定した日時のDateTimeオブジェクトを作成する」で説明しています。

年、月、日を取得する

DateTimeオブジェクトが表している日時の年はYear、月はMonth、日はDayプロパティで取得できます。

VB.NET
コードを隠すコードを選択
'2000年9月30日13時15分30秒を表すDateTimeオブジェクトを作成する
Dim dt As New DateTime(2000, 9, 30, 13, 15, 30)

'年を取得する。「2000」となる。
Dim year As Integer = dt.Year
'月を取得する。「9」となる。
Dim month As Integer = dt.Month
'日を取得する。「30」となる。
Dim day As Integer = dt.Day
C#
コードを隠すコードを選択
//2000年9月30日13時15分30秒を表すDateTimeオブジェクトを作成する
DateTime dt = new DateTime(2000, 9, 30, 13, 15, 30);

//年を取得する。「2000」となる。
int year = dt.Year;
//月を取得する。「9」となる。
int month = dt.Month;
//日を取得する。「30」となる。
int day = dt.Day;

時、分、秒を取得する

時間はHour、分はMinute、秒はSecondプロパティで取得できます。さらに、ミリ秒をMillisecondプロパティで取得できます。

VB.NET
コードを隠すコードを選択
'2000年9月30日13時15分30秒を表すDateTimeオブジェクトを作成する
Dim dt As New DateTime(2000, 9, 30, 13, 15, 30)

'時間を取得する。「13」となる。
Dim hour As Integer = dt.Hour
'分を取得する。「15」となる。
Dim minute As Integer = dt.Minute
'秒を取得する。「30」となる。
Dim second As Integer = dt.Second
'ミリ秒を取得する。「0」となる。
Dim millisecond As Integer = dt.Millisecond
C#
コードを隠すコードを選択
//2000年9月30日13時15分30秒を表すDateTimeオブジェクトを作成する
DateTime dt = new DateTime(2000, 9, 30, 13, 15, 30);

//時間を取得する。「13」となる。
int hour = dt.Hour;
//分を取得する。「15」となる。
int minute = dt.Minute;
//秒を取得する。「30」となる。
int second = dt.Second;
//ミリ秒を取得する。「0」となる。
int millisecond = dt.Millisecond;

曜日を取得する

曜日は、DayOfWeekプロパティで取得できます。DayOfWeekプロパティは、曜日を表すDayOfWeek列挙型の値になります。DayOfWeek列挙体の値を整数にキャストすると、DayOfWeek.Sundayが0、DayOfWeek.Saturdayが6になります。

曜日を文字列で取得するなら、DateTimeを文字列に変換する時に書式指定文字列として「ddd」(曜日の省略名)や「dddd」(曜日の完全な名前)を使います。書式指定文字列について詳しくは、「日時(DateTimeオブジェクト)を文字列に変換する」をご覧ください。

VB.NET
コードを隠すコードを選択
'2000年9月30日13時15分30秒を表すDateTimeオブジェクトを作成する
Dim dt As New DateTime(2000, 9, 30, 13, 15, 30)

'曜日を取得する。「DayOfWeek.Saturday」となる。
Dim week As DayOfWeek = dt.DayOfWeek
'Int32型にキャストする。「6」となる。
Dim weekNumber As Integer = CInt(dt.DayOfWeek)

'曜日を文字列で取得する
'省略された曜日名で取得する。「土」となる。
Dim strWeek1 As String = dt.ToString("ddd")
'完全な曜日名で取得する。「土曜日」となる。
Dim strWeek2 As String = dt.ToString("dddd")
C#
コードを隠すコードを選択
//2000年9月30日13時15分30秒を表すDateTimeオブジェクトを作成する
DateTime dt = new DateTime(2000, 9, 30, 13, 15, 30);

//曜日を取得する。「DayOfWeek.Saturday」となる。
DayOfWeek week = dt.DayOfWeek;
//Int32型にキャストする。「6」となる。
int weekNumber = (int)dt.DayOfWeek;

//曜日を文字列で取得する
//省略された曜日名で取得する。「土」となる。
string strWeek1 = dt.ToString("ddd");
//完全な曜日名で取得する。「土曜日」となる。
string strWeek2 = dt.ToString("dddd");

日付(年月日)の部分だけを取得する

DateTimeオブジェクトから日付(年月日)の部分だけを取得し、時刻の部分を削除する(つまり、時刻が 0:00:00 のDateTimeオブジェクトを取得する)には、Dateプロパティを使います。

VB.NET
コードを隠すコードを選択
'2000年9月30日13時15分30秒を表すDateTimeオブジェクトを作成する
Dim dt As New DateTime(2000, 9, 30, 13, 15, 30)

'「2000/09/30 0:00:00」のDateTimeオブジェクトを作成する
Dim dtd As DateTime = dt.Date
C#
コードを隠すコードを選択
//2000年9月30日13時15分30秒を表すDateTimeオブジェクトを作成する
DateTime dt = new DateTime(2000, 9, 30, 13, 15, 30);

//「2000/09/30 0:00:00」のDateTimeオブジェクトを作成する
DateTime dtd = dt.Date;

時刻の部分だけを取得する

DateTimeオブジェクトから時刻の部分だけを取得する(その日の0時0分0秒からの経過時間を取得する)には、TimeOfDayプロパティを使います。TimeOfDayプロパティは、TimeSpan型です。

VB.NET
コードを隠すコードを選択
'2000年9月30日13時15分30秒を表すDateTimeオブジェクトを作成する
Dim dt As New DateTime(2000, 9, 30, 13, 15, 30)

'時刻の部分を取得する。「13:15:30」となる。
Dim dtt As TimeSpan = dt.TimeOfDay
C#
コードを隠すコードを選択
//2000年9月30日13時15分30秒を表すDateTimeオブジェクトを作成する
DateTime dt = new DateTime(2000, 9, 30, 13, 15, 30);

//時刻の部分を取得する。「13:15:30」となる。
TimeSpan dtt = dt.TimeOfDay;

1月1日からの経過日数を取得する

1月1日から何日経ったかという年間積算日をDayOfYearプロパティで取得できます。この値は、1月1日ならば「1」で、12月31日ならば「365」(閏年であれば「366」)です。

VB.NET
コードを隠すコードを選択
'2000年1月30日13時15分30秒を表すDateTimeオブジェクトを作成する
Dim dt As New DateTime(2000, 1, 30, 13, 15, 30)

'年間積算日を取得する。「30」となる。
Dim doy As Integer = dt.DayOfYear
C#
コードを隠すコードを選択
//2000年1月30日13時15分30秒を表すDateTimeオブジェクトを作成する
DateTime dt = new DateTime(2000, 1, 30, 13, 15, 30);

//年間積算日を取得する。「30」となる。
int doy = dt.DayOfYear;

タイマ刻み数を取得する

DateTime.Ticksプロパティによって、西暦1年1月1日0時0分0秒からの経過時間をタイマ刻み数で取得できます。1タイマ刻み数は100ナノ秒(0.0000001秒)です。タイマ刻み数についてより詳しくは、「タイマ刻み数を指定してDateTimeを作成する」をご覧ください。

以下のコードは、ある処理にかかる時間を計測する一例を示しています。これより高精度で計測する方法を、「より高い精度で時間を計測する」で紹介しています。

VB.NET
コードを隠すコードを選択
'開始時刻をタイマ刻み数で取得する
Dim startTicks As Long = DateTime.Now.Ticks

'どのくらい時間がかかるか調べたい処理がここにあるものとする
System.Threading.Thread.Sleep(1000)

'終了時刻をタイマ刻み数で取得する
Dim endTicks As Long = DateTime.Now.Ticks

'かかった時間を表示する
Console.WriteLine("{0}ナノ秒かかりました", (endTicks - startTicks) * 100)
C#
コードを隠すコードを選択
//開始時刻をタイマ刻み数で取得する
long startTicks = DateTime.Now.Ticks;

//どのくらい時間がかかるか調べたい処理がここにあるものとする
System.Threading.Thread.Sleep(1000);

//終了時刻をタイマ刻み数で取得する
long endTicks = DateTime.Now.Ticks;

//かかった時間を表示する
Console.WriteLine("{0}ナノ秒かかりました", (endTicks - startTicks) * 100);

表している日時がローカル時刻かUTCかを取得する

DateTimeオブジェクトが表している日時がローカル時刻(現地時刻)なのかUTCなのかは、Kindプロパティで分かります。Kindプロパティの値がDateTimeKind.Localの時はローカル時刻、DateTimeKind.Utcの時はUTC、DateTimeKind.Unspecifiedの時はどちらか不明です。なおこのプロパティは、.NET Framework 2.0で追加されました。

Kindプロパティについてより詳しくは「DateTimeが表す日時が現地時刻かUTCかを設定する」をご覧ください。

以下の例では、DateTime.NowのKindプロパティがLocal、DateTime.UtcNowのKindプロパティがUtcとなることを確認しています。なおDateTime.NowとDateTime.UtcNowについては、「現在の日時を取得する」で説明しています。

VB.NET
コードを隠すコードを選択
'DateTime.NowのKindプロパティを確認する
Console.WriteLine(DateTime.Now.Kind)
'Local

'DateTime.UtcNowのKindプロパティを確認する
Console.WriteLine(DateTime.UtcNow.Kind)
'Utc
C#
コードを隠すコードを選択
//DateTime.NowのKindプロパティを確認する
Console.WriteLine(DateTime.Now.Kind);
//Local

//DateTime.UtcNowのKindプロパティを確認する
Console.WriteLine(DateTime.UtcNow.Kind);
//Utc

DateTime構造体のプロパティのまとめ

最後にまとめとして、ここで紹介したDateTime構造体のプロパティを表にまとめます。

プロパティ名 説明 プロパティ値の型 プロパティ値の範囲
Year 年を取得する。 Int32 1〜9999
Month 月を取得する。 Int32 1〜12
Day 日を取得する。 Int32 1〜31
Date 日付の部分を取得する DateTime
DayOfWeek 曜日を取得する。 DayOfWeek DayOfWeek.Sunday(0)〜DayOfWeek.Saturday(6)
DayOfYear 年間積算日を取得する。 Int32 1〜366
Hour 時間を取得する。 Int32 0〜23
Minute 分を取得する。 Int32 0〜59
Second 秒を取得する。 Int32 0〜59
Millisecond ミリ秒を取得する。 Int32 0〜999
TimeOfDay 時刻を取得する。 TimeSpan
Ticks タイマ刻み数を取得する。 Int64
Kind 現地時間かUTCかどちらでもないかを示す値を取得する。 DateTimeKind DateTimeKind.UnspecifiedかDateTimeKind.UtcかDateTimeKind.Local

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。