Como: Extrair o dia da semana a partir de uma data específica

O .NET Framework torna fácil para determinar o ordinal dia da semana para uma determinada data e para exibir o nome do dia da semana localizadas para uma determinada data. Um valor enumerado que indica o dia da semana correspondente a uma determinada data é disponível a partir de DayOfWeek ou DayOfWeek propriedade. Em contraste, recuperar o nome do dia da semana é uma operação de formatação que pode ser realizada chamando um método de formatação, como, por exemplo, um valor data e hora ToString método ou a String.Format método. Este tópico mostra como executar essas operações formatação.

Para extrair um número indicando o dia da semana a partir de uma data específica

  1. Se você estiver trabalhando com a representação de sequência de caracteres de uma data, converta-a em um valor DateTime ou um valor DateTimeOffset, usando os métodos estáticos DateTime.Parse ou DateTimeOffset.Parse.

  2. Use o DateTime.DayOfWeek ou a propriedade DateTimeOffset.DayOfWeek para recuperar um valor DayOfWeek que indica o dia da semana.

  3. Se necessário, cast (em C#) ou converta (em Visual Basic) o valor DayOfWeek em um número inteiro.

O exemplo a seguir exibe um número inteiro que representa o dia da semana a partir da representação em sequência de caracteres de uma data.

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

Para extrair o nome abreviado do dia da semana de uma data específica

  1. Se você estiver trabalhando com a representação de sequência de caracteres de uma data, converta-a em um valor DateTime ou um valor DateTimeOffset, usando os métodos estáticos DateTime.Parse ou DateTimeOffset.Parse.

  2. Você pode extrair o nome abreviado do dia da semana da cultura atual ou de uma cultura específica:

    1. Para extrair o nome abreviado do dia da semana da cultura atual, chame os valores DateTime.ToString(String) de data e hora, ou o método de instância DateTimeOffset.ToString(String), e passe a sequência de caracteres "ddd" como o parâmetro format. O exemplo a seguir ilustra a chamada ao método 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. Para extrair o nome abreviado dia da semana para uma cultura específica, chame os valores DateTime.ToString(String, IFormatProvider) de data e hora, ou o método de instância DateTimeOffset.ToString(String, IFormatProvider). Passe a sequência de caracteres "ddd" como o parâmetro format. Passe também um CultureInfo ou um objeto DateTimeFormatInfo que represente a cultura a qual você deseja recuperar como parâmetro provider o nome do dia da semana. O código a seguir ilustra uma chamada ao método ToString(String, IFormatProvider) usando um objeto CultureInfo, que representa a cultura fr-FR.

      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.
      

Para extrair o nome completo do dia da semana de uma data específica

  1. Se você estiver trabalhando com a representação de sequência de caracteres de uma data, converta-a em um valor DateTime ou um valor DateTimeOffset, usando os métodos estáticos DateTime.Parse ou DateTimeOffset.Parse.

  2. Você pode extrair o nome completo do dia da semana da cultura atual ou de uma cultura específica:

    1. Para extrair o nome do dia da semana da cultura atual, chame os valores DateTime.ToString(String) de data e hora, ou o método de instância DateTimeOffset.ToString(String), e passe a sequência de caracteres "ddd" como o parâmetro format. O exemplo a seguir ilustra a chamada ao método 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. Para extrair o nome do dia da semana de uma cultura específica, chame os valores DateTime.ToString(String, IFormatProvider) de data e hora, ou o método de instância DateTimeOffset.ToString(String, IFormatProvider). Passe a sequência de caracteres "ddd" como o parâmetro format. Passe também um CultureInfo ou um objeto DateTimeFormatInfo que represente a cultura a qual você deseja recuperar como parâmetro provider o nome do dia da semana. O código a seguir ilustra uma chamada ao método ToString(String, IFormatProvider) usando um objeto CultureInfo, que representa a cultura es-ES.

      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.
      

Exemplo

O exemplo ilustra chamadas para as propriedades DateTime.DayOfWeek e DateTimeOffset.DayOfWeek e para os métodos DateTime.ToString e DateTimeOffset.ToString para recuperação do número que representa o dia da semana, o nome abreviado do dia da semana, e o nome completo do dia da semana de uma determinada data.

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

Idiomas individuais podem fornecer uma funcionalidade que duplica ou complementa a funcionalidade fornecida pelo .NET Framework. Por exemplo, o Visual Basic inclui duas funções como essas:

  • Weekday, que retorna um número que indica o dia da semana de uma determinada data. Ela considera o valor ordinal do primeiro dia da semana como sendo um, enquanto a propriedade DateTime.DayOfWeek o considera como sendo zero.

  • WeekdayName, que retorna o nome do dia da semana na cultura atual, que corresponde a um determinado número de dia da semana.

O exemplo a seguir ilustra o uso das funções Weekday e WeekdayName do Visual Basic.

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   

Você também pode usar o valor retornado pela propriedade DateTime.DayOfWeek para recuperar o nome do dia da semana de uma determinada data. Isso requer apenas uma chamada ao método ToString no valor DayOfWeek retornado pela propriedade. No entanto, essa técnica não produz um nome localizado para o dia da semana da cultura atual, como mostra o exemplo a seguir.

' 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;

Compilando o código

Esses exemplos podem exigir:

  • Que os seguintes espaços de nome sejam importados:

Os exemplos também requerem:

  • Que uma referência à System.Core.dll seja adicionada a qualquer projeto aos quais os exemplos de código sejam adicionados.

Consulte também

Conceitos

Executar operações de formatação

Sequências de caracteres de formato padrão de data e hora

Sequências de Caracteres de Formato Personalizado de Data e Hora