Compartir a través de


Cómo: Extraer el día de la semana a partir de una fecha específica

.NET facilita la determinación del día ordinal de la semana para una fecha determinada y para mostrar el nombre del día de la semana localizado para una fecha determinada. Un valor enumerado que indica el día de la semana correspondiente a una fecha determinada está disponible en la propiedad DayOfWeek o DayOfWeek. En cambio, recuperar el nombre del día de la semana es una operación de formato que se puede realizar llamando a un método de formato, como el método ToString de un valor de fecha y hora o el método String.Format. En este artículo se muestra cómo realizar estas operaciones de formato.

Extraer un número que indica el día de la semana

  1. Utilice el método estático DateTime.Parse o DateTimeOffset.Parse para convertir la representación de cadena de una fecha a un valor DateTime o DateTimeOffset.

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

  3. Si es necesario, haga un 'casting' (en C#) o convierta (en Visual Basic) el valor DayOfWeek a un entero.

En el ejemplo siguiente se muestra un entero que representa el día de la semana de una fecha específica:

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

Extraiga el nombre abreviado del día de la semana.

  1. Utilice el método estático DateTime.Parse o DateTimeOffset.Parse para convertir la representación de cadena de una fecha en un valor DateTime o DateTimeOffset.

  2. Puede extraer el nombre abreviado del día de la semana de la cultura actual o de una cultura específica.

    1. Para extraer el nombre abreviado del día de la semana para la cultura actual, llame al método de instancia DateTime.ToString(String) o DateTimeOffset.ToString(String) del valor de fecha y hora, y pase la cadena ddd como parámetro format. En el ejemplo siguiente se muestra la llamada al ToString(String) método :

      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. Para extraer el nombre abreviado del día de la semana para una referencia cultural específica, 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 parámetro format . Pase como parámetro provider un objeto CultureInfo o un objeto DateTimeFormatInfo que represente la referencia cultural cuyo nombre de día de la semana desea recuperar. En el código siguiente se muestra una llamada al ToString(String, IFormatProvider) método mediante un CultureInfo objeto que representa la referencia cultural de 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.
      

Extraer el nombre completo del día de la semana

  1. Utilice el método estático DateTime.Parse o DateTimeOffset.Parse para convertir la representación de cadena de una fecha en un valor DateTime o DateTimeOffset.

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

    1. Para extraer el nombre del día de la semana para 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 la cadena dddd como parámetro format. En el ejemplo siguiente se muestra la llamada al ToString(String) método :

      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. Para extraer el nombre del día de la semana para una cultura específica, 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 parámetro format . Pase un objeto CultureInfo o DateTimeFormatInfo que represente la referencia cultural cuyo nombre de día de la semana desea recuperar como el parámetro provider. En el siguiente código se ilustra una llamada al método ToString(String, IFormatProvider) usando un objeto CultureInfo que representa la cultura 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.
      

Ejemplo

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

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

Los lenguajes individuales pueden proporcionar funcionalidad que duplica o complementa la funcionalidad proporcionada por .NET. Por ejemplo, Visual Basic incluye dos funciones de este tipo:

  • 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 DateTime.DayOfWeek propiedad considera que es cero.

  • WeekdayName, que devuelve el nombre del día de la semana en la cultura actual que corresponde a un número específico de día de la semana.

En el ejemplo siguiente se muestra el uso de las funciones Weekday Visual Basic 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

También puede usar el valor devuelto por la DateTime.DayOfWeek propiedad para recuperar el nombre del día de la semana de una fecha determinada. Este proceso solo requiere una llamada al método ToString en el valor DayOfWeek devuelto por la propiedad. Sin embargo, esta técnica no genera un nombre de día de la semana localizado para la referencia cultural actual, como se muestra en el ejemplo siguiente:

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

Consulte también