ここでは、日時を表したDateTimeオブジェクトから、年、月、日、時、分、秒などの情報を取得する方法を説明します。つまりは、DateTime構造体のプロパティの説明をしているだけです。
補足:DateTimeのプロパティは読み取り専用で、値の設定はできません。プロパティの値を変更したい場合は、新たにDateTimeオブジェクトを作成します。その方法は、「指定した日時のDateTimeオブジェクトを作成する」で説明しています。
DateTimeオブジェクトが表している日時の年はYear、月はMonth、日はDayプロパティで取得できます。
'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
//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プロパティで取得できます。
'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
//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オブジェクト)を文字列に変換する」をご覧ください。
'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")
//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プロパティを使います。
'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
//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型です。
'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
//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日から何日経ったかという年間積算日をDayOfYearプロパティで取得できます。この値は、1月1日ならば「1」で、12月31日ならば「365」(閏年であれば「366」)です。
'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
//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を作成する」をご覧ください。
以下のコードは、ある処理にかかる時間を計測する一例を示しています。これより高精度で計測する方法を、「より高い精度で時間を計測する」で紹介しています。
'開始時刻をタイマ刻み数で取得する 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)
//開始時刻をタイマ刻み数で取得する long startTicks = DateTime.Now.Ticks; //どのくらい時間がかかるか調べたい処理がここにあるものとする System.Threading.Thread.Sleep(1000); //終了時刻をタイマ刻み数で取得する long endTicks = DateTime.Now.Ticks; //かかった時間を表示する Console.WriteLine("{0}ナノ秒かかりました", (endTicks - startTicks) * 100);
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については、「現在の日時を取得する」で説明しています。
'DateTime.NowのKindプロパティを確認する Console.WriteLine(DateTime.Now.Kind) 'Local 'DateTime.UtcNowのKindプロパティを確認する Console.WriteLine(DateTime.UtcNow.Kind) 'Utc
//DateTime.NowのKindプロパティを確認する Console.WriteLine(DateTime.Now.Kind); //Local //DateTime.UtcNowのKindプロパティを確認する Console.WriteLine(DateTime.UtcNow.Kind); //Utc
最後にまとめとして、ここで紹介した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 |
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。