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 |