Поделиться через


Как извлечь день недели из определенной даты

.NET упрощает определение порядкового дня недели для определенной даты и отображения локализованного имени дня недели для определенной даты. Перечисленное значение, указывающее день недели, соответствующий определенной дате, доступно из свойства DayOfWeek или DayOfWeek. В отличие от этого, получение имени недели — это операция форматирования, которую можно выполнить путем вызова метода форматирования, например метода ToString даты и времени или метода String.Format. В этой статье показано, как выполнять эти операции форматирования.

Извлечение числа, указывающего день недели

  1. Используйте статический метод DateTime.Parse или DateTimeOffset.Parse для преобразования строкового представления даты в DateTime или значение DateTimeOffset.

  2. Используйте свойство DateTime.DayOfWeek или DateTimeOffset.DayOfWeek для получения значения DayOfWeek, указывающего день недели.

  3. При необходимости приводите значение DayOfWeek (в C#) или преобразуйте (в Visual Basic) в целое число.

В следующем примере отображается целое число, представляющее день недели определенной даты:

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

Извлечение сокращенного названия дня недели

  1. Используйте статический метод DateTime.Parse или DateTimeOffset.Parse для преобразования строкового представления даты в DateTime или значение DateTimeOffset.

  2. Вы можете извлечь сокращенное название дня недели текущей культуры или определенной культуры.

    1. Чтобы извлечь сокращенное название дня недели для текущего языка и региональных параметров, вызовите метод экземпляра объекта даты и времени DateTime.ToString(String) или DateTimeOffset.ToString(String) и передайте строку ddd в качестве параметра format. В следующем примере показан вызов метода ToString(String):

      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. Чтобы извлечь сокращенное название дня недели для определенной культуры, вызовите метод DateTime.ToString(String, IFormatProvider) или DateTimeOffset.ToString(String, IFormatProvider) экземпляра значения даты и времени. Передайте строку ddd в качестве параметра format. Передайте либо CultureInfo, либо объект DateTimeFormatInfo, представляющий культуру, название дня недели которой вы хотите получить, в качестве параметра provider. Следующий код иллюстрирует вызов метода ToString(String, IFormatProvider) с помощью объекта CultureInfo, представляющего культуру 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.
      

Извлечение полного имени дня недели

  1. Используйте статический метод DateTime.Parse или DateTimeOffset.Parse для преобразования строкового представления даты в DateTime или значение DateTimeOffset.

  2. Вы можете извлечь полное название дня недели для текущей культуры или определенной культуры.

    1. Чтобы извлечь имя дня недели для текущей культуры, вызовите метод DateTime.ToString(String) или DateTimeOffset.ToString(String) экземпляра даты и времени и передайте строку dddd в качестве параметра format. В следующем примере показан вызов метода ToString(String):

      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. Чтобы извлечь название дня недели для определенного языка и региональных параметров, вызовите метод DateTime.ToString(String, IFormatProvider) или DateTimeOffset.ToString(String, IFormatProvider) экземпляра даты и времени. Передайте строку dddd в качестве параметра format. Передайте CultureInfo или объект DateTimeFormatInfo, представляющий культуру, имя дня недели которой нужно получить в качестве параметра provider. Следующий код иллюстрирует вызов метода ToString(String, IFormatProvider), используя объект 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.
      

Пример

В следующем примере показаны вызовы свойств DateTime.DayOfWeek и DateTimeOffset.DayOfWeek для получения числа, представляющего день недели для определенной даты. Он также включает вызовы методов DateTime.ToString и DateTimeOffset.ToString для извлечения названия дня недели в сокращенной форме и полного названия дня недели.

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 {dateString} to a date.");
      }
   }
}
// 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

Отдельные языки могут предоставлять функции, повторяющие или дополняющие функциональные возможности, предоставляемые .NET. Например, Visual Basic включает две такие функции:

  • Weekday, который возвращает число, указывающее день недели определенной даты. Он считает порядковое значение первого дня недели одним, в то время как свойство DateTime.DayOfWeek считает, что оно равно нулю.

  • WeekdayName, который возвращает название дня недели в текущих языковых и региональных настройках, соответствующее определённому номеру дня недели.

В следующем примере показано использование функций visual Basic Weekday и WeekdayName:

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

Можно также использовать значение, возвращаемое свойством DateTime.DayOfWeek, чтобы получить имя дня недели определенной даты. Для этого процесса требуется только вызов метода ToString для значения DayOfWeek, возвращаемого свойством. Однако этот метод не создает локализованное название дня недели для текущей культуры, как показано в следующем примере.

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

См. также