Porady: wyodrębnianie dnia tygodnia z określonej daty

Platforma .NET ułatwia określenie porządkowego dnia tygodnia dla określonej daty oraz wyświetlanie zlokalizowanej nazwy dnia tygodnia dla określonej daty. Wyliczona wartość wskazująca dzień tygodnia odpowiadający określonej dacie jest dostępna z DayOfWeek właściwości lub DayOfWeek . Natomiast pobieranie nazwy dnia tygodnia jest operacją formatowania, którą można wykonać przez wywołanie metody formatowania, takiej jak metoda daty i godziny ToString lub String.Format metody . W tym artykule pokazano, jak wykonać te operacje formatowania.

Wyodrębnianie liczby wskazującej dzień tygodnia

  1. Użyj statycznej DateTime.Parse metody lub DateTimeOffset.Parse , aby przekonwertować reprezentację ciągu daty na DateTime wartość lub DateTimeOffset .

  2. DateTime.DayOfWeek Użyj właściwości orDateTimeOffset.DayOfWeek, aby pobrać wartość wskazującą DayOfWeek dzień tygodnia.

  3. W razie potrzeby rzutuj wartość (w języku C#) lub przekonwertuj DayOfWeek (w Visual Basic) na liczbę całkowitą.

W poniższym przykładzie jest wyświetlana liczba całkowita reprezentująca dzień tygodnia określonej daty:

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

Wyodrębnij skróconą nazwę dnia tygodnia

  1. Użyj statycznej DateTime.Parse metody lub DateTimeOffset.Parse , aby przekonwertować reprezentację ciągu daty na DateTime wartość lub DateTimeOffset .

  2. Możesz wyodrębnić skróconą nazwę dnia tygodnia bieżącej kultury lub określonej kultury:

    1. Aby wyodrębnić skróconą nazwę dnia tygodnia dla bieżącej kultury, wywołaj metodę daty i godziny lub DateTime.ToString(String)DateTimeOffset.ToString(String) wystąpienia wartości i przekaż ciąg ddd jako format parametr. Poniższy przykład ilustruje wywołanie ToString(String) metody :

      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. Aby wyodrębnić skróconą nazwę dnia tygodnia dla określonej kultury, wywołaj metodę typu data i godzina lub DateTime.ToString(String, IFormatProvider)DateTimeOffset.ToString(String, IFormatProvider) wartość wystąpienia. Przekaż ciąg ddd jako format parametr. Przekaż obiekt lub, który reprezentuje kulturę CultureInfoDateTimeFormatInfo , której nazwa dnia tygodnia ma zostać pobrana jako provider parametr. Poniższy kod ilustruje wywołanie ToString(String, IFormatProvider) metody przy użyciu CultureInfo obiektu reprezentującego kulturę fr-FR:

      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.
      

Wyodrębnianie pełnej nazwy dnia tygodnia

  1. Użyj statycznej DateTime.Parse metody lub DateTimeOffset.Parse , aby przekonwertować reprezentację ciągu daty na DateTime wartość lub DateTimeOffset .

  2. Możesz wyodrębnić pełną nazwę dnia tygodnia bieżącej kultury lub określonej kultury:

    1. Aby wyodrębnić nazwę dnia tygodnia dla bieżącej kultury, wywołaj metodę daty i godziny wartości DateTime.ToString(String) lub DateTimeOffset.ToString(String) wystąpienia i przekaż ciąg dddd jako format parametr. Poniższy przykład ilustruje wywołanie ToString(String) metody :

      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. Aby wyodrębnić nazwę dnia tygodnia dla określonej kultury, wywołaj metodę daty i godziny lub DateTime.ToString(String, IFormatProvider)DateTimeOffset.ToString(String, IFormatProvider) wartości wystąpienia. Przekaż ciąg dddd jako format parametr. Przekaż obiekt lub, który reprezentuje kulturę CultureInfoDateTimeFormatInfo , której nazwa dnia tygodnia ma zostać pobrana jako provider parametr. Poniższy kod ilustruje wywołanie ToString(String, IFormatProvider) metody przy użyciu obiektu reprezentującego kulturę CultureInfo es-ES:

      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.
      

Przykład

Poniższy przykład ilustruje wywołania DateTime.DayOfWeek właściwości i DateTimeOffset.DayOfWeek w celu pobrania numeru reprezentującego dzień tygodnia dla określonej daty. Zawiera również wywołania DateTime.ToString metod i DateTimeOffset.ToString w celu wyodrębnienia skróconej nazwy dnia tygodnia i pełnej nazwy dnia tygodnia.

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

Poszczególne języki mogą zapewniać funkcjonalność, która duplikuje lub uzupełnia funkcjonalność zapewnianą przez platformę .NET. Na przykład Visual Basic zawiera dwie takie funkcje:

  • Weekday, która zwraca liczbę wskazującą dzień tygodnia określonej daty. Uważa, że wartość porządkowa pierwszego dnia tygodnia to jeden, podczas gdy DateTime.DayOfWeek właściwość uważa ją za zero.

  • WeekdayName, który zwraca nazwę tygodnia w bieżącej kulturze, która odpowiada konkretnej liczbie dni powszednich.

Poniższy przykład ilustruje użycie języka Visual Basic Weekday i WeekdayName funkcji:

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

Możesz również użyć wartości zwróconej DateTime.DayOfWeek przez właściwość, aby pobrać nazwę dnia tygodnia określonej daty. Ten proces wymaga tylko wywołania ToString metody dla DayOfWeek wartości zwracanej przez właściwość . Jednak ta technika nie generuje zlokalizowanej nazwy dnia tygodnia dla bieżącej kultury, jak pokazano w poniższym przykładzie:

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

Zobacz też