CalendarWeekRule Wyliczenie

Definicja

Definiuje różne reguły określania pierwszego tygodnia roku.

public enum class CalendarWeekRule
public enum CalendarWeekRule
[System.Serializable]
public enum CalendarWeekRule
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum CalendarWeekRule
type CalendarWeekRule = 
[<System.Serializable>]
type CalendarWeekRule = 
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type CalendarWeekRule = 
Public Enum CalendarWeekRule
Dziedziczenie
CalendarWeekRule
Atrybuty

Pola

FirstDay 0

Wskazuje, że pierwszy tydzień roku rozpoczyna się w pierwszym dniu roku i kończy się przed następującym wyznaczonym pierwszym dniem tygodnia. Wartość to 0.

FirstFourDayWeek 2

Wskazuje, że pierwszy tydzień roku to pierwszy tydzień z co najmniej czterema dniami przed wyznaczonym pierwszym dniem tygodnia. Wartość to 2.

FirstFullWeek 1

Wskazuje, że pierwszy tydzień roku rozpoczyna się od pierwszego wystąpienia wyznaczonego pierwszego dnia tygodnia lub po pierwszym dniu roku. Wartość to 1.

Uwagi

Element członkowski CalendarWeekRule wyliczenia jest zwracany przez DateTimeFormatInfo.CalendarWeekRule właściwość i jest używany przez bieżący kalendarz kultury w celu określenia reguły tygodnia kalendarzowego. Wartość wyliczenia jest również używana jako parametr Calendar.GetWeekOfYear metody .

Reguły tygodnia kalendarzowego zależą od System.DayOfWeek wartości, która wskazuje pierwszy dzień tygodnia oprócz CalendarWeekRule wartości. Właściwość DateTimeFormatInfo.FirstDayOfWeek udostępnia wartość domyślną kultury, ale dowolną DayOfWeek wartość można określić jako pierwszy dzień tygodnia w metodzie Calendar.GetWeekOfYear .

Pierwszy tydzień na FirstDay podstawie wartości może mieć od jednego do siedmiu dni. Pierwszy tydzień na FirstFullWeek podstawie wartości zawsze ma siedem dni. Pierwszy tydzień na FirstFourDayWeek podstawie wartości może mieć od czterech do siedmiu dni.

Na przykład w kalendarzu gregoriańskim załóżmy, że pierwszy dzień roku (1 stycznia) przypada we wtorek, a wyznaczony pierwszy dzień tygodnia to niedziela. Wybranie FirstFullWeek definiuje pierwszą niedzielę (6 stycznia) jako początek pierwszego tygodnia roku. Pierwsze pięć dni roku są uznawane za część ostatniego tygodnia poprzedniego roku. Natomiast wybranie FirstFourDayWeek definiuje pierwszy dzień roku (1 stycznia) jako początek pierwszego tygodnia roku, ponieważ istnieje więcej niż cztery dni od 1 stycznia do dnia przed następującą niedzielą.

Date Pierwszy dzień FirstFullWeek FirstFourDayWeek
31 grudnia Ostatni tydzień poprzedniego roku Ostatni tydzień poprzedniego roku Ostatni tydzień poprzedniego roku
1 stycznia Tydzień 1 Ostatni tydzień poprzedniego roku Tydzień 1
2 stycznia Tydzień 1 Ostatni tydzień poprzedniego roku Tydzień 1
3 stycznia thu Tydzień 1 Ostatni tydzień poprzedniego roku Tydzień 1
4 stycznia pt. Tydzień 1 Ostatni tydzień poprzedniego roku Tydzień 1
5 stycznia Tydzień 1 Ostatni tydzień poprzedniego roku Tydzień 1
6 stycznia Tydzień 2 Tydzień 1 Tydzień 2
7 stycznia Tydzień 2 Tydzień 1 Tydzień 2
8 stycznia Tydzień 2 Tydzień 1 Tydzień 2
9 stycznia Tydzień 2 Tydzień 1 Tydzień 2
10 stycznia thu Tydzień 2 Tydzień 1 Tydzień 2
11 stycznia pt. Tydzień 2 Tydzień 1 Tydzień 2
12 stycznia Tydzień 2 Tydzień 1 Tydzień 2

Załóżmy, że pierwszy dzień roku (1 stycznia) przypada w piątek, a wyznaczony pierwszy dzień tygodnia to niedziela. Wybranie FirstFourDayWeek definiuje pierwszą niedzielę (3 stycznia) jako początek pierwszego tygodnia roku, ponieważ istnieje mniej niż cztery dni od 1 stycznia do dnia przed następującą niedzielą.

Date Pierwszy dzień FirstFullWeek FirstFourDayWeek
31 grudnia thu Ostatni tydzień poprzedniego roku Ostatni tydzień poprzedniego roku Ostatni tydzień poprzedniego roku
1 stycznia pt. Tydzień 1 Ostatni tydzień poprzedniego roku Ostatni tydzień poprzedniego roku
2 stycznia Tydzień 1 Ostatni tydzień poprzedniego roku Ostatni tydzień poprzedniego roku
3 stycznia Tydzień 2 Tydzień 1 Tydzień 1
4 stycznia Tydzień 2 Tydzień 1 Tydzień 1
5 stycznia Tydzień 2 Tydzień 1 Tydzień 1
6 stycznia Tydzień 2 Tydzień 1 Tydzień 1
7 stycznia thu Tydzień 2 Tydzień 1 Tydzień 1
8 stycznia pt. Tydzień 2 Tydzień 1 Tydzień 1
9 stycznia Tydzień 2 Tydzień 1 Tydzień 1

W poniższym przykładzie pokazano, jak wartości CalendarWeekRule i DayOfWeek są używane razem w celu określenia, jak są przypisywane tygodnie. W kalendarzu Gregoriańskim pierwszy dzień roku (styczeń 1) w 2013 r. przypada we wtorek. Jeśli wyznaczony pierwszy dzień tygodnia to niedziela, pierwsza niedziela (6 stycznia) jest pierwszym dniem pierwszego tygodnia roku, a sobota (5 stycznia) należy do pięćdziesiątego trzeciego tygodnia poprzedniego roku. Zmiana reguły tygodnia kalendarzowego na FirstFourDayWeek zdefiniowanie wtorku (1 stycznia) jako początku pierwszego tygodnia roku, ponieważ od wtorku, 1 stycznia i niedzielę, 6 stycznia. Korzystając z tej reguły, 5 stycznia należy do pierwszego tygodnia roku. W przypadku 2010 r. rok, w którym 1 stycznia przypada w piątek, stosując FirstFourDayWeek zasadę z DayOfWeek.Sunday jako pierwszy dzień tygodnia sprawia, że niedziela, 3 stycznia na początku pierwszego tygodnia roku, ponieważ pierwszy tydzień w 2010 r., który ma więcej niż cztery dni, to od 3 do 9 stycznia.

using System;
using System.Globalization;

public class Example
{
   static Calendar cal = new GregorianCalendar();

   public static void Main()
   {
      DateTime date = new DateTime(2013, 1, 5);
      DayOfWeek firstDay = DayOfWeek.Sunday;
      CalendarWeekRule rule;

      rule = CalendarWeekRule.FirstFullWeek;
      ShowWeekNumber(date, rule, firstDay);

      rule = CalendarWeekRule.FirstFourDayWeek;
      ShowWeekNumber(date, rule, firstDay);

      Console.WriteLine();
      date = new DateTime(2010, 1, 3);
      ShowWeekNumber(date, rule, firstDay);
   }

   private static void ShowWeekNumber(DateTime dat, CalendarWeekRule rule,
                                      DayOfWeek firstDay)
   {
      Console.WriteLine("{0:d} with {1:F} rule and {2:F} as first day of week: week {3}",
                        dat, rule, firstDay, cal.GetWeekOfYear(dat, rule, firstDay));
   }
}
// The example displays the following output:
//       1/5/2013 with FirstFullWeek rule and Sunday as first day of week: week 53
//       1/5/2013 with FirstFourDayWeek rule and Sunday as first day of week: week 1
//
//       1/3/2010 with FirstFourDayWeek rule and Sunday as first day of week: week 1
Imports System.Globalization

Module Example
   
   Dim cal As New GregorianCalendar()
   
   Public Sub Main()
      Dim dat As Date = #01/05/2013#
      Dim firstDay As DayOfWeek = DayOfWeek.Sunday
      Dim rule As CalendarWeekRule
      
      rule = CalendarWeekRule.FirstFullWeek
      ShowWeekNumber(dat, rule, firstDay)
      
      rule = CalendarWeekRule.FirstFourDayWeek
      ShowWeekNumber(dat, rule, firstDay)

      Console.WriteLine()
      dat = #1/03/2010#
      ShowWeekNumber(dat, rule, firstDay)
   End Sub
   
   Private Sub ShowWeekNumber(dat As Date, rule As CalendarWeekRule, 
                              firstDay As DayOfWeek)
      Console.WriteLine("{0:d} with {1:F} rule and {2:F} as first day of week: week {3}",
                        dat, rule, firstDay, cal.GetWeekOfYear(dat, rule, firstDay))
   End Sub   
End Module
' The example displays the following output:
'       1/5/2013 with FirstFullWeek rule and Sunday as first day of week: week 53
'       1/5/2013 with FirstFourDayWeek rule and Sunday as first day of week: week 1
'       
'       1/3/2010 with FirstFourDayWeek rule and Sunday as first day of week: week 1

Uwaga

Nie mapuje to dokładnie na ISO 8601. Różnice zostały omówione w wpisie w blogu ISO 8601 Week of Year format w Microsoft .NET. Począwszy od platformy .NET Core 3.0, ISOWeek.GetYear i ISOWeek.GetWeekOfYear rozwiąż ten problem.

Każdy CultureInfo obiekt obsługuje zestaw kalendarzy. Właściwość Calendar zwraca domyślny kalendarz kultury, a OptionalCalendars właściwość zwraca tablicę zawierającą wszystkie kalendarze obsługiwane przez kulturę. Aby zmienić kalendarz używany przez element CultureInfo, ustaw Calendar właściwość CultureInfo.DateTimeFormat na nową Calendarwartość .

Dotyczy

Zobacz też