次の方法で共有


方法 : 特定の日付から曜日を抽出する

更新 : 2007 年 11 月

.NET Framework では、特定の日付が週の何日目であるかを簡単に判別して、その日付に対応するローカライズされた曜日の名前を表示できます。特定の日付に対応する曜日を示す列挙値は、DayOfWeek プロパティまたは DayOfWeek プロパティから取得できます。一方、曜日の名前を取得するには、書式設定操作として、日付/時刻値の ToString メソッドや String.Format メソッドなどの書式指定メソッドを呼び出します。ここでは、このような書式設定操作を実行する方法を示します。

曜日を示す数値を特定の日付から抽出するには

  1. 日付を表す文字列形式を処理している場合には、静的 DateTime.Parse または DateTimeOffset.Parse メソッドを使用して、それを DateTime 値または DateTimeOffset 値に変換します。

  2. DateTime.DayOfWeek プロパティまたは DateTimeOffset.DayOfWeek プロパティを使用して、曜日を示す DayOfWeek 値を取得します。

  3. 必要に応じて、DayOfWeek 値を整数にキャスト (C# の場合) または変換 (Visual Basic の場合) します。

日付を表す文字列形式から取得された曜日を表す整数を表示する例を次に示します。

Dim dateValue As Date = #6/11/2008#
Console.WriteLine(dateValue.DayOfWeek)           ' Displays 3
DateTime dateValue = new DateTime(2008, 6, 11);
Console.WriteLine((int) dateValue.DayOfWeek);      // Displays 3

特定の日付から曜日の省略名を抽出するには

  1. 日付を表す文字列形式を処理している場合には、静的 DateTime.Parse メソッドまたは DateTimeOffset.Parse メソッドを使用して、それを DateTime 値または DateTimeOffset 値に変換します。

  2. 次のようにして、現在のカルチャまたは特定のカルチャの曜日の省略名を抽出できます。

    1. 現在のカルチャの曜日の省略名を抽出するには、日付/時刻値の DateTime.ToString(String) インスタンス メソッドまたは DateTimeOffset.ToString(String) インスタンス メソッドを呼び出して、文字列 "ddd" を format パラメータとして渡します。ToString(String) メソッドの呼び出し例を次に示します。

      Dim dateValue As Date = #6/11/2008#
      Console.WriteLine(dateValue.ToString("ddd"))    ' Displays Wed
      
      DateTime dateValue = new DateTime(2008, 6, 11);
      Console.WriteLine(dateValue.ToString("ddd"));    // Displays Wed
      
    2. 特定のカルチャの曜日の省略名を抽出するには、日付/時刻値の DateTime.ToString(String, IFormatProvider) インスタンス メソッドまたは DateTimeOffset.ToString(String, IFormatProvider) インスタンス メソッドを呼び出します。文字列 "ddd" を format パラメータとして渡します。取得する曜日名のカルチャを表す CultureInfo オブジェクトまたは DateTimeFormatInfo オブジェクトを provider パラメータとして渡します。次のコードは、fr-FR カルチャを表す CultureInfo オブジェクトを使って ToString(String, IFormatProvider) メソッドを呼び出す方法を示しています。

      Dim dateValue As Date = #6/11/2008#
      Console.WriteLine(dateValue.ToString("ddd", _
                        New CultureInfo("fr-FR")))    ' Displays mer.
      
      DateTime dateValue = new DateTime(2008, 6, 11);
      Console.WriteLine(dateValue.ToString("ddd", 
                        new CultureInfo("fr-FR")));    // Displays mer.
      

特定の日付から曜日の正式名を抽出するには

  1. 日付を表す文字列形式を処理している場合には、静的 DateTime.Parse メソッドまたは DateTimeOffset.Parse メソッドを使用して、それを DateTime 値または DateTimeOffset 値に変換します。

  2. 次のようにして、現在のカルチャまたは特定のカルチャの曜日の正式名を抽出できます。

    1. 現在のカルチャの曜日名を抽出するには、日付/時刻値の DateTime.ToString(String) インスタンス メソッドまたは DateTimeOffset.ToString(String) インスタンス メソッドを呼び出して、文字列 "dddd" を format パラメータとして渡します。ToString(String) メソッドの呼び出し例を次に示します。

      Dim dateValue As Date = #6/11/2008#
      Console.WriteLine(dateValue.ToString("dddd"))    ' Displays Wednesday
      
      DateTime dateValue = new DateTime(2008, 6, 11);
      Console.WriteLine(dateValue.ToString("dddd"));    // Displays Wednesday
      
    2. 特定のカルチャの曜日名を抽出するには、日付/時刻値の DateTime.ToString(String, IFormatProvider) インスタンス メソッドまたは DateTimeOffset.ToString(String, IFormatProvider) インスタンス メソッドを呼び出します。文字列 "dddd" を format パラメータとして渡します。取得する曜日名のカルチャを表す CultureInfo オブジェクトまたは DateTimeFormatInfo オブジェクトを provider パラメータとして渡します。次のコードは、es-ES カルチャを表す CultureInfo オブジェクトを使って ToString(String, IFormatProvider) メソッドを呼び出す方法を示しています。

      Dim dateValue As Date = #6/11/2008#
      Console.WriteLine(dateValue.ToString("dddd", _
                        New CultureInfo("es-ES")))     ' Displays mircoles.
      
      DateTime dateValue = new DateTime(2008, 6, 11);
      Console.WriteLine(dateValue.ToString("dddd", 
                        new CultureInfo("es-ES")));    // Displays mircoles.
      

使用例

この例は、特定の日付の曜日を表す数値、曜日の省略名、および曜日の正式名を取得するための DateTime.DayOfWeek プロパティと DateTimeOffset.DayOfWeek プロパティ、および DateTime.ToString メソッドと DateTimeOffset.ToString メソッドの呼び出しを示しています。

Dim dateString As String = "6/11/2007"
Dim dateValue As Date
Dim dateOffsetValue As DateTimeOffset

Try
   Dim dateTimeFormats As DateTimeFormatInfo
   ' Convert date representation to a date value
   dateValue = Date.Parse(dateString, CultureInfo.InvariantCulture)
   dateOffsetValue = New DateTimeOffset(dateValue, _
                               TimeZoneInfo.Local.GetUtcOffset(dateValue))            
   ' Convert date representation to a number indicating the day of week
   Console.WriteLine(dateValue.DayOfWeek)
   Console.WriteLine(dateOffsetValue.DayOfWeek)

   ' Display abbreviated weekday name using current culture
   Console.WriteLine(dateValue.ToString("ddd"))
   Console.WriteLine(dateOffsetValue.ToString("ddd"))

   ' Display full weekday name using current culture
   Console.WriteLine(dateValue.ToString("dddd"))
   Console.WriteLine(dateOffsetValue.ToString("dddd"))

   ' Display abbreviated weekday name for de-DE culture
   Console.WriteLine(dateValue.ToString("ddd", New CultureInfo("de-DE")))
   Console.WriteLine(dateOffsetValue.ToString("ddd", _
                                              New CultureInfo("de-DE")))

   ' Display abbreviated weekday name with de-DE DateTimeFormatInfo object
   dateTimeFormats = New CultureInfo("de-DE").DateTimeFormat
   Console.WriteLine(dateValue.ToString("ddd", dateTimeFormats))
   Console.WriteLine(dateOffsetValue.ToString("ddd", dateTimeFormats))

   ' Display full weekday name for fr-FR culture
   Console.WriteLine(dateValue.ToString("ddd", New CultureInfo("fr-FR")))
   Console.WriteLine(dateOffsetValue.ToString("ddd", _
                                              New CultureInfo("fr-FR")))

   ' Display abbreviated weekday name with fr-FR DateTimeFormatInfo object
   dateTimeFormats = New CultureInfo("fr-FR").DateTimeFormat
   Console.WriteLine(dateValue.ToString("dddd", dateTimeFormats))
   Console.WriteLine(dateOffsetValue.ToString("dddd", dateTimeFormats))
Catch e As FormatException
   Console.WriteLine("Unable to convert {0} to a date.", dateString)
End Try
' The example displays the following output to the console:
'       1
'       1
'       Mon
'       Mon
'       Monday
'       Monday
'       Mo
'       Mo
'       Mo
'       Mo
'       lun.
'       lun.
'       lundi
'       lundi
string dateString = "6/11/2007";
DateTime dateValue;
DateTimeOffset dateOffsetValue;

try
{
   DateTimeFormatInfo dateTimeFormats;
   // Convert date representation to a date value
   dateValue = DateTime.Parse(dateString, CultureInfo.InvariantCulture);
   dateOffsetValue = new DateTimeOffset(dateValue, 
                                TimeZoneInfo.Local.GetUtcOffset(dateValue));         

   // Convert date representation to a number indicating the day of week
   Console.WriteLine((int) dateValue.DayOfWeek);
   Console.WriteLine((int) dateOffsetValue.DayOfWeek);

   // Display abbreviated weekday name using current culture
   Console.WriteLine(dateValue.ToString("ddd"));
   Console.WriteLine(dateOffsetValue.ToString("ddd"));

   // Display full weekday name using current culture
   Console.WriteLine(dateValue.ToString("dddd"));
   Console.WriteLine(dateOffsetValue.ToString("dddd"));

   // Display abbreviated weekday name for de-DE culture
   Console.WriteLine(dateValue.ToString("ddd", new CultureInfo("de-DE")));
   Console.WriteLine(dateOffsetValue.ToString("ddd", 
                                               new CultureInfo("de-DE")));

   // Display abbreviated weekday name with de-DE DateTimeFormatInfo object
   dateTimeFormats = new CultureInfo("de-DE").DateTimeFormat;
   Console.WriteLine(dateValue.ToString("ddd", dateTimeFormats));
   Console.WriteLine(dateOffsetValue.ToString("ddd", dateTimeFormats));

   // Display full weekday name for fr-FR culture
   Console.WriteLine(dateValue.ToString("ddd", new CultureInfo("fr-FR")));
   Console.WriteLine(dateOffsetValue.ToString("ddd", 
                                              new CultureInfo("fr-FR")));

   // Display abbreviated weekday name with fr-FR DateTimeFormatInfo object
   dateTimeFormats = new CultureInfo("fr-FR").DateTimeFormat;
   Console.WriteLine(dateValue.ToString("dddd", dateTimeFormats));
   Console.WriteLine(dateOffsetValue.ToString("dddd", dateTimeFormats));
}
catch (FormatException)
{
   Console.WriteLine("Unable to convert {0} to a date.", dateString);
}
// The example displays the following output to the console:
//       1
//       1
//       Mon
//       Mon
//       Monday
//       Monday
//       Mo
//       Mo
//       Mo
//       Mo
//       lun.
//       lun.
//       lundi
//       lundi

個々の言語には、.NET Framework の機能と重複する機能や補足機能が用意されている場合があります。たとえば Visual Basic には、これに該当する次の 2 つの関数があります。

  • 特定の日付の曜日を示す数値を返す Weekday。これは、週の最初の曜日の序数を 1 として扱います (これに対して、DateTime.DayOfWeek プロパティは 0 として扱います)。

  • 曜日を表す特定の数値に対応する、現在のカルチャの曜日名を返す WeekdayName。

次の例は、Visual Basic の Weekday 関数および WeekdayName 関数の使用法を示しています。

Dim dateValue As Date = #6/11/2008#

' Get weekday number using Visual Basic Weekday function
Console.WriteLine(Weekday(dateValue))                 ' Displays 4
' Compare with .NET DateTime.DayOfWeek property
Console.WriteLine(dateValue.DayOfWeek)                ' Displays 3

' Get weekday name using Weekday and WeekdayName functions
Console.WriteLine(WeekdayName(Weekday(dateValue)))    ' Displays Wednesday

' Change culture to de-DE
Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
Thread.CurrentThread.CurrentCulture = New CultureInfo("de-DE")
' Get weekday name using Weekday and WeekdayName functions
Console.WriteLine(WeekdayName(Weekday(dateValue)))   ' Displays Donnerstag

' Restore original culture
Thread.CurrentThread.CurrentCulture = originalCulture   

また、DateTime.DayOfWeek プロパティによって返される値を使用して、特定の日付の曜日名を取得することもできます。これに必要な操作は、プロパティによって返される DayOfWeek 値に対して ToString メソッドを呼び出すことだけです。ただし、次の例が示すように、この技法では、現在のカルチャに対するローカライズされた曜日名が生成されません。

' Change current culture to fr-FR
Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR")

Dim dateValue As Date = #6/11/2008#
' Display the DayOfWeek string representation
Console.WriteLine(dateValue.DayOfWeek.ToString())     ' Displays Wednesday
' Restore original current culture
Thread.CurrentThread.CurrentCulture = originalCulture
// Change current culture to fr-FR
CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

DateTime dateValue = new DateTime(2008, 6, 11);
// Display the DayOfWeek string representation
Console.WriteLine(dateValue.DayOfWeek.ToString());   // Displays Wednesday
// Restore original current culture
Thread.CurrentThread.CurrentCulture = originalCulture;

コードのコンパイル方法

これらの例では、次の操作が必要になる可能性があります。

  • 次の名前空間をインポートする。

    • System.Globalization 名前空間。

    • System.Threading 名前空間。これは、DayOfWeek の例、および Weekday 関数と WeekdayName 関数を示す Visual Basic の例をコンパイルするために必要です。

さらに、これらの例では、次の操作も必要です。

  • コード例の追加先となるすべてのプロジェクトに System.Core.dll への参照を追加する。

参照

概念

書式設定に関する「方法」トピック

日付と時刻の書式指定文字列

標準の日付と時刻の書式指定文字列

カスタムの日付と時刻の書式指定文字列