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


Практическое руководство. Извлечение дня недели из конкретной даты

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

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

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

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

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

В следующем примере показывается целое число, представляющее день недели из строкового представления даты.

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 или в значение DateTimeOffset с помощью статического метода DateTime.Parse или метода DateTimeOffset.Parse.

  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. Следующий код иллюстрирует вызов метода ToString(String, IFormatProvider), используя объект CultureInfo, представляющий французский язык.

      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 или в значение DateTimeOffset с помощью статического метода DateTime.Parse или метода DateTimeOffset.Parse.

  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. Следующий код иллюстрирует вызов метода ToString(String, IFormatProvider), используя объект CultureInfo, представляющий испанский язык.

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

Пример

В примере показаны обращения к свойствам 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 включает две такие функции.

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

  • Функция 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. Для этого необходимо только вызывать метод ToString для значения DayOfWeek, возвращаемого свойством. Однако этот способ не возвращает локализованные названия дней недели для текущего языка, как показано в следующем примере.

' 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 и примера на Visual Basic, который иллюстрирует функции Weekday и WeekdayName.

Для примеров также необходимо:

  • Чтобы ссылка на System.Core.dll была добавлена во все проекты, в которые добавляются примеры кода.

См. также

Основные понятия

Выполнение операций форматирования

Строки стандартных форматов даты и времени

Строки настраиваемых форматов даты и времени