DOBON.NET

日時(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年を取得する。Int321~9999
Month月を取得する。Int321~12
Day日を取得する。Int321~31
Date日付の部分を取得するDateTime
DayOfWeek曜日を取得する。DayOfWeekDayOfWeek.Sunday(0)~DayOfWeek.Saturday(6)
DayOfYear年間積算日を取得する。Int321~366
Hour時間を取得する。Int320~23
Minute分を取得する。Int320~59
Second秒を取得する。Int320~59
Millisecondミリ秒を取得する。Int320~999
TimeOfDay時刻を取得する。TimeSpan
Ticksタイマ刻み数を取得する。Int64
Kind現地時間かUTCかどちらでもないかを示す値を取得する。DateTimeKindDateTimeKind.UnspecifiedかDateTimeKind.UtcかDateTimeKind.Local

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

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

この記事への評価

この記事へのコメント

この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。