Vorgehensweise: Extrahieren des Wochentags aus einem bestimmten Datum

Mit .NET ist es einfach, den Wochentag für ein bestimmtes Datum zu ermitteln und den lokalisierten Namen eines Wochentags für ein bestimmtes Datum anzuzeigen. Ein Aufzählungswert, der den einem bestimmten Datum entsprechenden Wochentag anzeigt, ist über die DayOfWeek- oder die DayOfWeek-Eigenschaft verfügbar. Dagegen ist das Abrufen des Namens eines Wochentags ein Formatierungsvorgang, der durch das Aufrufen einer Formatierungsmethode ausgeführt werden kann, wie z. B. der ToString-Methode eines Datums- oder Zeitwertes oder der String.Format-Methode. In diesem Artikel wird gezeigt, wie diese Formatierungsvorgänge ausgeführt werden.

Extrahieren einer Zahl, die den Wochentag angibt

  1. Verwenden Sie die statische DateTime.Parse- oder DateTimeOffset.Parse-Methode, um die Zeichenfolgendarstellung eines Datums in einen DateTime- oder DateTimeOffset-Wert zu konvertieren.

  2. Verwenden Sie die DateTime.DayOfWeek- oder die DateTimeOffset.DayOfWeek-Eigenschaft, um einen DayOfWeek-Wert abzurufen, der den Wochentag anzeigt.

  3. Falls nötig, wandeln Sie den DayOfWeek-Wert in eine Ganzzahl um (in C#) oder konvertieren Sie ihn (in Visual Basic).

Das folgende Beispiel zeigt eine Ganzzahl, die den Wochentag eines bestimmten Datums anzeigt:

using System;

public class Example
{
   public static void Main()
   {
      DateTime dateValue = new DateTime(2008, 6, 11);
      Console.WriteLine((int) dateValue.DayOfWeek);
   }
}
// The example displays the following output:
//       3
Module Example
    Public Sub Main()
        Dim dateValue As Date = #6/11/2008#
        Console.WriteLine(dateValue.DayOfWeek)
    End Sub
End Module
' The example displays the following output:
'    3

Extrahieren des abgekürzten Wochentagsnamens

  1. Verwenden Sie die statische DateTime.Parse- oder DateTimeOffset.Parse-Methode, um die Zeichenfolgendarstellung eines Datums in einen DateTime- oder DateTimeOffset-Wert zu konvertieren.

  2. Sie können den abgekürzten Wochentagsnamen der aktuellen Kultur oder einer bestimmten Kultur extrahieren:

    1. Um den abgekürzten Wochentagsnamen der aktuellen Kultur zu extrahieren, rufen Sie die DateTime.ToString(String)- oder DateTimeOffset.ToString(String)-Instanzmethode des Datums- oder Zeitwerts auf, und übergeben Sie die Zeichenfolge ddd als format-Parameter. Im folgenden Beispiel wird das Aufrufen der ToString(String)-Methode veranschaulicht:

      using System;
      
      public class Example
      {
         public static void Main()
         {
            DateTime dateValue = new DateTime(2008, 6, 11);
            Console.WriteLine(dateValue.ToString("ddd"));
         }
      }
      // The example displays the following output:
       //       Wed
      
      Module Example
          Public Sub Main()
              Dim dateValue As Date = #6/11/2008#
              Console.WriteLine(dateValue.ToString("ddd"))
          End Sub
      End Module
      ' The example displays the following output:
      '       Wed
      
    2. Um den abgekürzten Wochentagsnamen einer bestimmten Kultur zu extrahieren, rufen Sie die DateTime.ToString(String, IFormatProvider)- oder DateTimeOffset.ToString(String, IFormatProvider)-Instanzmethode des Datums- oder Uhrzeitwerts auf. Übergeben Sie die Zeichenfolge ddd als format-Parameter. Übergeben Sie entweder ein CultureInfo- oder ein DateTimeFormatInfo-Objekt, das die Kultur darstellt, deren Wochentagsnamen Sie abrufen wollen, als provider-Parameter. Der folgende Code veranschaulicht einen Aufruf der ToString(String, IFormatProvider)-Methode mit einem CultureInfo-Objekt, das die fr-FR-Kultur darstellt:

      using System;
      using System.Globalization;
      
      public class Example
      {
         public static void Main()
         {
            DateTime dateValue = new DateTime(2008, 6, 11);
            Console.WriteLine(dateValue.ToString("ddd",
                              new CultureInfo("fr-FR")));
         }
      }
      // The example displays the following output:
      //       mer.
      
      Imports System.Globalization
      
      Module Example
          Public Sub Main()
              Dim dateValue As Date = #6/11/2008#
              Console.WriteLine(dateValue.ToString("ddd",
                                New CultureInfo("fr-FR")))
          End Sub
      End Module
      ' The example displays the following output:
      '       mer.
      

Extrahieren des vollständigen Wochentagsnamens

  1. Verwenden Sie die statische DateTime.Parse- oder DateTimeOffset.Parse-Methode, um die Zeichenfolgendarstellung eines Datums in einen DateTime- oder DateTimeOffset-Wert zu konvertieren.

  2. Sie können den vollen Wochentagsnamen der aktuellen Kultur oder einer bestimmten Kultur extrahieren:

    1. Um den Wochentagsnamen der aktuellen Kultur zu extrahieren, rufen Sie die DateTime.ToString(String)- oder DateTimeOffset.ToString(String)-Instanzmethode des Datums- oder Uhrzeitwerts auf, und übergeben Sie die Zeichenfolge dddd als format-Parameter. Im folgenden Beispiel wird das Aufrufen der ToString(String)-Methode veranschaulicht:

      using System;
      
      public class Example
      {
         public static void Main()
         {
            DateTime dateValue = new DateTime(2008, 6, 11);
            Console.WriteLine(dateValue.ToString("dddd"));
         }
      }
      // The example displays the following output:
      //       Wednesday
      
      Module Example
          Public Sub Main()
              Dim dateValue As Date = #6/11/2008#
              Console.WriteLine(dateValue.ToString("dddd"))
          End Sub
      End Module
      ' The example displays the following output:
      '       Wednesday
      
    2. Um den Wochentagsnamen einer bestimmten Kultur zu extrahieren, rufen Sie die DateTime.ToString(String, IFormatProvider)- oder DateTimeOffset.ToString(String, IFormatProvider)-Instanzmethode des Datums- oder Uhrzeitwerts auf. Übergeben Sie die Zeichenfolge dddd als format-Parameter. Übergeben Sie entweder ein CultureInfo- oder ein DateTimeFormatInfo-Objekt, das die Kultur darstellt, deren Wochentagsnamen Sie abrufen wollen, als provider-Parameter. Der folgende Code veranschaulicht einen Aufruf der ToString(String, IFormatProvider)-Methode mit einem CultureInfo-Objekt, das die es-ES-Kultur darstellt:

      using System;
      using System.Globalization;
      
      public class Example
      {
         public static void Main()
         {
            DateTime dateValue = new DateTime(2008, 6, 11);
            Console.WriteLine(dateValue.ToString("dddd",
                              new CultureInfo("es-ES")));
         }
      }
      // The example displays the following output:
      //       miércoles.
      
      Imports System.Globalization
      
      Module Example
          Public Sub Main()
              Dim dateValue As Date = #6/11/2008#
              Console.WriteLine(dateValue.ToString("dddd", _
                                New CultureInfo("es-ES")))
          End Sub
      End Module
      ' The example displays the following output:
      '       miércoles.
      

Beispiel

Das folgende Beispiel veranschaulicht die Aufrufe der Eigenschaften DateTime.DayOfWeek und DateTimeOffset.DayOfWeek, um die Zahl abzurufen, die den Wochentag für ein bestimmtes Datum darstellt. Es enthält auch Aufrufe der Methoden DateTime.ToString und DateTimeOffset.ToString zum Extrahieren des abgekürzten Wochentagsnamens und des vollständigen Wochentagsnamens.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      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:
//       1
//       1
//       Mon
//       Mon
//       Monday
//       Monday
//       Mo
//       Mo
//       Mo
//       Mo
//       lun.
//       lun.
//       lundi
//       lundi
Imports System.Globalization

Module Example
    Public Sub Main()
        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
    End Sub
End Module
' The example displays the following output to the console:
'       1
'       1
'       Mon
'       Mon
'       Monday
'       Monday
'       Mo
'       Mo
'       Mo
'       Mo
'       lun.
'       lun.
'       lundi
'       lundi

Einzelne Sprachen verfügen möglicherweise über Funktionen, die die von .NET zur Verfügung gestellte Funktionalität duplizieren oder ergänzen. Visual Basic verfügt beispielsweise über zwei solcher Funktionen:

  • Weekday, die eine Zahl zurückgibt, die den Wochentag eines bestimmten Datums anzeigt. Sie betrachtet den Ordinalwert des ersten Wochentags als eins, während die DateTime.DayOfWeek-Eigenschaft ihn als null betrachtet.

  • WeekdayName, die den Namen des Wochentags in der aktuellen Kultur zurückgibt, der der Nummer eines bestimmten Wochentags entspricht.

Das folgende Beispiel veranschaulicht die Verwendung der Weekday- und WeekdayName-Funktionen in Visual Basic:

Imports System.Globalization
Imports System.Threading

Module Example
    Public Sub Main()
        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
    End Sub
End Module

Sie können auch den von der DateTime.DayOfWeek-Eigenschaft zurückgegebenen Wert verwenden, um den Wochentagsnamen eines bestimmten Datums abzurufen. Dieser Prozess erfordert lediglich einen Aufruf der ToString-Methode auf dem von der Eigenschaft zurückgegebenen DayOfWeek-Wert. Diese Vorgehensweise erzeugt jedoch nicht den lokalisierten Wochentagsnamen für die aktuelle Kultur, wie das folgende Beispiel zeigt:

using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      // 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());
      // Restore original current culture
      Thread.CurrentThread.CurrentCulture = originalCulture;
   }
}
// The example displays the following output:
//       Wednesday
Imports System.Globalization
Imports System.Threading

Module Example
    Public Sub Main()
        ' 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())
        ' Restore original current culture
        Thread.CurrentThread.CurrentCulture = originalCulture
    End Sub
End Module
' The example displays the following output:
'       Wednesday

Siehe auch