Поделиться через


Calendar.GetWeekOfYear(DateTime, CalendarWeekRule, DayOfWeek) Метод

Определение

Возвращает неделю года, включающую дату в указанное DateTime значение.

public:
 virtual int GetWeekOfYear(DateTime time, System::Globalization::CalendarWeekRule rule, DayOfWeek firstDayOfWeek);
public virtual int GetWeekOfYear(DateTime time, System.Globalization.CalendarWeekRule rule, DayOfWeek firstDayOfWeek);
abstract member GetWeekOfYear : DateTime * System.Globalization.CalendarWeekRule * DayOfWeek -> int
override this.GetWeekOfYear : DateTime * System.Globalization.CalendarWeekRule * DayOfWeek -> int
Public Overridable Function GetWeekOfYear (time As DateTime, rule As CalendarWeekRule, firstDayOfWeek As DayOfWeek) As Integer

Параметры

time
DateTime

Значение даты и времени.

rule
CalendarWeekRule

Значение перечисления, определяющее календарную неделю.

firstDayOfWeek
DayOfWeek

Значение перечисления, представляющее первый день недели.

Возвращаемое значение

Положительное целое число, представляющее неделю года, включающее дату в time параметре.

Исключения

time более ранний MinSupportedDateTime или более поздний MaxSupportedDateTime.

–или–

firstDayOfWeek недопустимое DayOfWeek значение.

–или–

rule недопустимое CalendarWeekRule значение.

Примеры

В следующем примере кода показано, как GetWeekOfYear результат зависит от используемого FirstDayOfWeek и используемого CalendarWeekRule . Если указанная дата является последним днем года, GetWeekOfYear возвращает общее количество недель в этом году.

using System;
using System.Globalization;

public class SamplesCalendar  {

   public static void Main()  {

      // Gets the Calendar instance associated with a CultureInfo.
      CultureInfo myCI = new CultureInfo("en-US");
      Calendar myCal = myCI.Calendar;

      // Gets the DTFI properties required by GetWeekOfYear.
      CalendarWeekRule myCWR = myCI.DateTimeFormat.CalendarWeekRule;
      DayOfWeek myFirstDOW = myCI.DateTimeFormat.FirstDayOfWeek;

      // Displays the number of the current week relative to the beginning of the year.
      Console.WriteLine( "The CalendarWeekRule used for the en-US culture is {0}.", myCWR );
      Console.WriteLine( "The FirstDayOfWeek used for the en-US culture is {0}.", myFirstDOW );
      Console.WriteLine( "Therefore, the current week is Week {0} of the current year.", myCal.GetWeekOfYear( DateTime.Now, myCWR, myFirstDOW ));

      // Displays the total number of weeks in the current year.
      DateTime LastDay = new System.DateTime( DateTime.Now.Year, 12, 31 );
      Console.WriteLine( "There are {0} weeks in the current year ({1}).", myCal.GetWeekOfYear( LastDay, myCWR, myFirstDOW ), LastDay.Year );
   }
}

/*
This code produces the following output.  Results vary depending on the system date.

The CalendarWeekRule used for the en-US culture is FirstDay.
The FirstDayOfWeek used for the en-US culture is Sunday.
Therefore, the current week is Week 1 of the current year.
There are 53 weeks in the current year (2001).

*/
Imports System.Globalization

Public Class SamplesCalendar

   Public Shared Sub Main()
      
      ' Gets the Calendar instance associated with a CultureInfo.
      Dim myCI As New CultureInfo("en-US")
      Dim myCal As Calendar = myCI.Calendar
      
      ' Gets the DTFI properties required by GetWeekOfYear.
      Dim myCWR As CalendarWeekRule = myCI.DateTimeFormat.CalendarWeekRule
      Dim myFirstDOW As DayOfWeek = myCI.DateTimeFormat.FirstDayOfWeek
      
      ' Displays the number of the current week relative to the beginning of the year.
      Console.WriteLine("The CalendarWeekRule used for the en-US culture is {0}.", myCWR)
      Console.WriteLine("The FirstDayOfWeek used for the en-US culture is {0}.", myFirstDOW)
      Console.WriteLine("Therefore, the current week is Week {0} of the current year.", myCal.GetWeekOfYear(DateTime.Now, myCWR, myFirstDOW))
      
      ' Displays the total number of weeks in the current year.
      Dim LastDay = New System.DateTime(DateTime.Now.Year, 12, 31)
      Console.WriteLine("There are {0} weeks in the current year ({1}).", myCal.GetWeekOfYear(LastDay, myCWR, myFirstDOW), LastDay.Year)
   End Sub
End Class


'This code produces the following output.  Results vary depending on the system date.
'
'The CalendarWeekRule used for the en-US culture is FirstDay.
'The FirstDayOfWeek used for the en-US culture is Sunday.
'Therefore, the current week is Week 1 of the current year.
'There are 53 weeks in the current year (2001).

Комментарии

Этот метод можно использовать для определения количества недель в году, задав time значение последнего дня года.

Объект DateTimeFormatInfo для определенного языка и региональных параметров, использующий календарь, указанный DateTimeFormatInfo.Calendar свойством, включает следующие значения, относящиеся к rule языку и firstDayOfWeek региональным параметрам:

  • Свойство DateTimeFormatInfo.FirstDayOfWeek содержит первый день недели по умолчанию, который можно использовать для firstDayOfWeek параметра.

  • Свойство DateTimeFormatInfo.CalendarWeekRule содержит правило недели календаря по умолчанию, которое можно использовать для rule параметра.

Замечание

Это не соответствует стандарту ISO 8601. Различия рассматриваются в записи блога ISO 8601 Неделя года в Microsoft .NET. Начиная с .NET Core 3.0 и ISOWeek.GetYearISOWeek.GetWeekOfYear решить эту проблему.

В следующем примере используется объект текущего языка и региональных параметров DateTimeFormatInfo для определения того, что 1 января 2011 г. находится в первой неделе года в григорианском календаре.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
      DateTime date1 = new DateTime(2011, 1, 1);
      Calendar cal = dfi.Calendar;

      Console.WriteLine("{0:d}: Week {1} ({2})", date1,
                        cal.GetWeekOfYear(date1, dfi.CalendarWeekRule,
                                          dfi.FirstDayOfWeek),
                        cal.ToString().Substring(cal.ToString().LastIndexOf(".") + 1));
   }
}
// The example displays the following output:
//       1/1/2011: Week 1 (GregorianCalendar)
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dfi As DateTimeFormatInfo = DateTimeFormatInfo.CurrentInfo
      Dim date1 As Date = #1/1/2011#
      Dim cal As Calendar = dfi.Calendar
      
      Console.WriteLine("{0:d}: Week {1} ({2})", date1, 
                        cal.GetWeekOfYear(date1, dfi.CalendarWeekRule, 
                                          dfi.FirstDayOfWeek),
                        cal.ToString().Substring(cal.ToString().LastIndexOf(".") + 1))       
   End Sub
End Module
' The example displays the following output:
'       1/1/2011: Week 1 (GregorianCalendar)

Для некоторых календарей вызов GetWeekOfYear метода вызывает ArgumentOutOfRangeException определенные сочетания rule и firstDayOfWeek значения, даже если time дата, возвращаемая свойством этого календаря MinSupportedDateTime , больше даты. В следующей таблице перечислены затронутые календари, определенные rule значения и диапазон самых ранних поддерживаемых time значений. Конкретное минимальное DateTime значение зависит от значения firstDayOfWeek параметра.

Calendar Значение CalendarWeekRule Грегорианская дата (M/dd/гггг) Дата в календаре (M/dd/гггг)
ChineseLunisolarCalendar FirstFullWeek 2.19.1901 –2.25.1901 1.1.1901–1.7.1901
ChineseLunisolarCalendar FirstFourDayWeek 2.19.1901–2.22.1901 1.01.1901–1.04.1901
HebrewCalendar FirstDay 9/17/1583 1/01/5344
HebrewCalendar FirstFullWeek 9.17.1583 до 9.23.1583 1/01/5344 до 1/07/5344
HebrewCalendar FirstFourDayWeek 9.17.1583 до 9.20.1583 1/01/5344 до 1/04/5344
HijriCalendar FirstFullWeek 7.18.0622–7.24.0622 1.01.0001–1.07.0001
HijriCalendar FirstFourDayWeek 7.18.0622–7.21.0622 1.01.0001–1.04.0001
JapaneseLunisolarCalendar FirstFullWeek 1.28.1960–2.03.1960 1.01.35–1.07.0035
JapaneseLunisolarCalendar FirstFourDayWeek 1.28.1960–1.31.1960 1.01.0035–1.04.0035
JulianCalendar FirstFullWeek 1.01.0001–1.05.0001 1/03/0001 до 1/07/0001
JulianCalendar FirstFourDayWeek 1.01.0001–1.02.0001 1/03/0001 до 1/04/0001
KoreanLunisolarCalendar FirstFullWeek 2.14.0918–2.20.0918 1.01.0918–1.07.0918
KoreanLunisolarCalendar FirstFourDayWeek 2.14.0918–2.17.0918 1.01.0918–1.04.0918
PersianCalendar FirstFullWeek 3.21.0622–3.27.0622 1.01.0001–1.07.0001
PersianCalendar FirstFourDayWeek 3.21.0622–3.24.0622 1.01.0001–1.04.0001
TaiwanLunisolarCalendar FirstFullWeek 2.18.1912–24.1912 1.01.0001–1.07.0001
TaiwanLunisolarCalendar FirstFourDayWeek 2.18.1912–2.21.1912 1.01.0001–1.04.0001
UmAlQuraCalendar FirstFullWeek 4.30.1900–5.06.1900 1.01.1318–1.07.1318
UmAlQuraCalendar FirstFourDayWeek 4.30.1900–5.03.1900 1.01.1318–1.04.1318

Применяется к

См. также раздел