Cómo: Extraer el día de la semana de una fecha concreta

En .NET Framework es más fácil determinar el día ordinal de la semana de una fecha determinada y mostrar el nombre del día de la semana localizado para una determinada fecha. Hay un valor enumerado que indica el día de la semana que se corresponde con una fecha determinada disponible en la propiedad DayOfWeek o DayOfWeek. Por otra parte, recuperar el nombre del día de la semana es una operación de formato que se puede llevar a cabo llamando a un método de formato, como el método String.Format o ToString del valor de fecha y hora. En este tema se muestra cómo se realizan estas operaciones de formato.

Para extraer un número que indique el día de la semana de una fecha concreta

  1. Cuando trabaje con la representación de cadena de una fecha, conviértala en un valor DateTime o DateTimeOffset mediante el método estático DateTime.Parse o DateTimeOffset.Parse.

  2. Utilice la propiedad DateTime.DayOfWeek o DateTimeOffset.DayOfWeek para recuperar un valor DayOfWeek que indique el día de la semana.

  3. Si es necesario, convierta el valor DayOfWeek en un entero.

En el ejemplo siguiente se muestra un entero que representa el día de la semana en la representación de cadena de una fecha.

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 extraer el nombre del día de la semana abreviado de una fecha concreta

  1. Cuando trabaje con la representación de cadena de una fecha, conviértala en un valor DateTime o DateTimeOffset mediante el método estático DateTime.Parse o DateTimeOffset.Parse.

  2. Puede extraer el nombre del día de la semana abreviado de la referencia cultural actual o de una referencia cultural concreta:

    1. Para extraer el nombre del día de la semana abreviado en la referencia cultural actual, llame al método de instancia DateTime.ToString(String) o DateTimeOffset.ToString(String) del valor de fecha y hora y pase "ddd" de la cadena como parámetro format. En el siguiente ejemplo se muestra la llamada al 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 extraer el nombre del día de la semana abreviado en una referencia cultural concreta, llame al método de instancia DateTime.ToString(String, IFormatProvider) o DateTimeOffset.ToString(String, IFormatProvider) del valor de fecha y hora. Pase la cadena "ddd" como el parámetro format. Pase un objeto CultureInfo o DateTimeFormatInfo que represente la referencia cultural cuyo nombre del día de la semana desea recuperar como el parámetro provider. En el código siguiente se muestra una llamada al método ToString(String, IFormatProvider) mediante un objeto CultureInfo que representa la referencia cultural 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 extraer el nombre completo del día de la semana de una fecha concreta

  1. Cuando trabaje con la representación de cadena de una fecha, conviértala en un valor DateTime o DateTimeOffset mediante el método estático DateTime.Parse o DateTimeOffset.Parse.

  2. Puede extraer el nombre completo del día de la semana en la referencia cultural actual o en una referencia cultural concreta:

    1. Para extraer el nombre del día de la semana en la referencia cultural actual, llame al método de instancia DateTime.ToString(String) o DateTimeOffset.ToString(String) del valor de fecha y hora y pase "dddd" de la cadena como parámetro format. En el siguiente ejemplo se muestra la llamada al 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 extraer el nombre del día de la semana en una referencia cultural concreta, llame al método de instancia DateTime.ToString(String, IFormatProvider) o DateTimeOffset.ToString(String, IFormatProvider) del valor de fecha y hora. Pase la cadena "dddd" como el parámetro format. Pase un objeto CultureInfo o DateTimeFormatInfo que represente la referencia cultural cuyo nombre del día de la semana desea recuperar como el parámetro provider. En el código siguiente se muestra una llamada al método ToString(String, IFormatProvider) mediante un objeto CultureInfo que representa la referencia cultural 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.
      

Ejemplo

En el ejemplo se muestran las llamadas a las propiedades DateTime.DayOfWeek y DateTimeOffset.DayOfWeek y a los métodos DateTime.ToString y DateTimeOffset.ToString para recuperar el número que representa el día de la semana, el nombre abreviado del día de la semana y el nombre completo del día de la semana de una fecha determinada.

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

Cada uno de los lenguajes puede proporcionar una funcionalidad que duplique o complemente la funcionalidad proporcionada en .NET Framework. Por ejemplo, Visual Basic incluye dos funciones:

  • Weekday, que devuelve un número que indica el día de la semana de una fecha determinada. Considera que el valor ordinal del primer día de la semana es uno, mientras que la propiedad DateTime.DayOfWeek considera que es cero.

  • WeekdayName, que devuelve el nombre de la semana en la referencia cultural actual que se corresponde con un número del día de la semana determinado.

En el ejemplo siguiente se muestra cómo se utilizan las funciones Weekday y WeekdayName de 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   

También puede utilizar el valor devuelto por la propiedad DateTime.DayOfWeek para recuperar el nombre del día de la semana de una fecha determinada. Para ello, sólo debe realizarse una llamada al método ToString del valor DayOfWeek devuelto por la propiedad. Sin embargo, esta técnica no genera un nombre del día de la semana localizado en la referencia cultural actual, como se muestra en el ejemplo siguiente.

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

Compilar el código

En estos ejemplos puede ser necesario:

  • Que se importen los siguientes espacios de nombres:

Los ejemplos también requieren:

  • Que una referencia a System.Core.dll se agregue a cualquier proyecto en el que se agreguen ejemplos de código.

Vea también

Conceptos

Efectuar operaciones de formato

Cadenas con formato de fecha y hora estándar

Cadenas de formato de fecha y hora personalizadas