Dela via


Gör så här: Extrahera veckodagen från ett specifikt datum

.NET gör det enkelt att fastställa ordningsdagen i veckan för ett specifikt datum och att visa det lokaliserade namnet på veckodagen för detta datum. Ett uppräknat värde som anger den veckodag som motsvarar ett visst datum är tillgängligt från egenskapen DayOfWeek eller DayOfWeek. Att hämta veckodagsnamnet är däremot en formateringsåtgärd som kan utföras genom att anropa en formateringsmetod, till exempel ett datum- och tidsvärdes ToString-metod eller metoden String.Format. Den här artikeln visar hur du utför dessa formateringsåtgärder.

Extrahera ett tal som anger veckodagen

  1. Använd metoden static DateTime.Parse eller DateTimeOffset.Parse för att konvertera strängrepresentationen av ett datum till ett DateTime eller ett DateTimeOffset värde.

  2. Använd egenskapen DateTime.DayOfWeek eller DateTimeOffset.DayOfWeek för att hämta ett DayOfWeek värde som anger veckodagen.

  3. Om det behövs omvandlar du (i C#) eller konverterar (i Visual Basic) värdet DayOfWeek till ett heltal.

I följande exempel visas ett heltal som representerar veckodagen för ett visst datum:

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

Extrahera det förkortade veckodagsnamnet

  1. Använd metoden static DateTime.Parse eller DateTimeOffset.Parse för att konvertera strängrepresentationen av ett datum till ett DateTime eller ett DateTimeOffset värde.

  2. Du kan extrahera det förkortade veckodagsnamnet för den aktuella kulturen eller en specifik kultur:

    1. Om du vill extrahera det förkortade veckodagsnamnet för den aktuella kulturen anropar du datum- och tidsvärdets DateTime.ToString(String)- eller DateTimeOffset.ToString(String)-instansmetod och skickar strängen ddd som format parameter. I följande exempel visas anropet till metoden 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. Om du vill extrahera det förkortade veckodagsnamnet för en viss kultur anropar du datum- och tidsvärdets DateTime.ToString(String, IFormatProvider)- eller DateTimeOffset.ToString(String, IFormatProvider) instansmetod. Skicka strängen ddd som parametern format. Skicka antingen ett CultureInfo eller ett DateTimeFormatInfo objekt som representerar den kultur vars veckodagnamn du vill hämta, som en provider parameter. Följande kod illustrerar ett anrop till metoden ToString(String, IFormatProvider) med hjälp av ett CultureInfo objekt som representerar fr-FR kultur:

      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.
      

Extrahera det fullständiga veckodagsnamnet

  1. Använd metoden static DateTime.Parse eller DateTimeOffset.Parse för att konvertera strängrepresentationen av ett datum till ett DateTime eller ett DateTimeOffset värde.

  2. Du kan extrahera det fullständiga veckodagsnamnet för den aktuella kulturen eller en specifik kultur:

    1. Om du vill extrahera veckodagsnamnet för den aktuella kulturen anropar du datum- och tidsvärdets DateTime.ToString(String)- eller DateTimeOffset.ToString(String)-instansmetod och skickar strängen dddd som parametern format. I följande exempel visas anropet till metoden 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. Om du vill extrahera veckodagsnamnet för en specifik kultur anropar du datum- och tidsvärdets DateTime.ToString(String, IFormatProvider)- eller DateTimeOffset.ToString(String, IFormatProvider)-instansmetod. Skicka strängen dddd som parametern format. Skicka antingen ett CultureInfo- eller ett DateTimeFormatInfo-objekt som representerar den kultur vars veckodagens namn du vill hämta, som parameter provider. Följande kod illustrerar ett anrop till metoden ToString(String, IFormatProvider) med hjälp av ett CultureInfo objekt som representerar es-ES kultur:

      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.
      

Exempel

I följande exempel visas anrop till egenskaperna DateTime.DayOfWeek och DateTimeOffset.DayOfWeek för att hämta numret som representerar veckodagen för ett visst datum. Den innehåller även anrop till metoderna DateTime.ToString och DateTimeOffset.ToString för att extrahera det förkortade veckodagsnamnet och det fullständiga veckodagsnamnet.

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

Enskilda språk kan ge funktioner som duplicerar eller kompletterar de funktioner som tillhandahålls av .NET. Visual Basic innehåller till exempel två sådana funktioner:

  • Weekday, som returnerar ett tal som anger veckodagen för ett visst datum. Man anser att ordningsvärdet för den första dagen i veckan är ett, medan egenskapen DateTime.DayOfWeek betraktar det som noll.

  • WeekdayName, som returnerar namnet på veckan i den aktuella kulturen som motsvarar ett visst veckodagsnummer.

I följande exempel visas hur funktionerna Visual Basic Weekday och WeekdayName används:

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

Du kan också använda värdet som returneras av egenskapen DateTime.DayOfWeek för att hämta veckodagsnamnet för ett visst datum. Den här processen kräver endast ett anrop till ToString-metoden på det DayOfWeek-värde som returneras av egenskapen. Den här tekniken genererar dock inte ett lokaliserat veckodagsnamn för den aktuella kulturen, vilket visas i följande exempel:

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

Se även