Calendar.GetWeekOfYear(DateTime, CalendarWeekRule, DayOfWeek) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Devolve a semana do ano que inclui a data no valor especificado 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
Parâmetros
- time
- DateTime
Um valor de data e hora.
- rule
- CalendarWeekRule
Um valor de enumeração que define uma semana civil.
- firstDayOfWeek
- DayOfWeek
Um valor de enumeração que representa o primeiro dia da semana.
Devoluções
Um número inteiro positivo que representa a semana do ano e inclui a data no time parâmetro.
Exceções
time é anterior MinSupportedDateTime ou posterior a MaxSupportedDateTime.
-ou-
firstDayOfWeek não é um valor válido DayOfWeek .
-ou-
rule não é um valor válido CalendarWeekRule .
Exemplos
O seguinte exemplo de código mostra como o resultado de GetWeekOfYear varia dependendo do FirstDayOfWeek e do CalendarWeekRule utilizado. Se a data especificada for o último dia do ano, GetWeekOfYear devolve o número total de semanas desse ano.
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).
Observações
Este método pode ser usado para determinar o número de semanas do ano, definindo time para o último dia do ano.
O DateTimeFormatInfo objeto para uma cultura particular que utiliza o calendário indicado pela DateTimeFormatInfo.Calendar propriedade inclui os seguintes valores específicos da cultura que podem ser usados para os rule parâmetros e firstDayOfWeek :
A DateTimeFormatInfo.FirstDayOfWeek propriedade contém o primeiro dia padrão da semana que pode ser usado para o
firstDayOfWeekparâmetro.A DateTimeFormatInfo.CalendarWeekRule propriedade contém a regra padrão da semana civil que pode ser usada para o
ruleparâmetro.
Note
Isto não corresponde exatamente à ISO 8601. As diferenças são discutidas na entrada do blogue ISO 8601 Semana do Ano em formato Microsoft .NET. Começando com .NET Core 3.0, ISOWeek.GetYear e ISOWeek.GetWeekOfYear resolvem este problema.
O exemplo seguinte utiliza o objeto da DateTimeFormatInfo cultura atual para determinar que 1 de janeiro de 2011 corresponde à primeira semana do ano no calendário gregoriano.
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)
Para alguns calendários, uma chamada ao GetWeekOfYear método gera um ArgumentOutOfRangeException para combinações particulares de rule valores e firstDayOfWeek mesmo que time seja maior do que a data devolvida pela propriedade desse MinSupportedDateTime calendário. A tabela seguinte lista os calendários afetados, os valores específicos rule e o intervalo dos valores suportados time mais antigos. O valor mínimo DateTime específico depende do valor do firstDayOfWeek parâmetro.
| Calendário | Valor da Regra do CalendárioSemana | Data gregoriana (M/dd/yyyy) | Data no calendário (M/dd/yyyy) |
|---|---|---|---|
| ChineseLunisolarCalendar | FirstFullWeek | 19/02/1901 a 25/02/1901 | 1/1/1901 a 1/7/1901 |
| ChineseLunisolarCalendar | FirstFourDayWeek | 19/02/1901 a 22/02/1901 | 01/01/1901 a 04/01/1901 |
| HebrewCalendar | FirstDay | 9/17/1583 | 1/01/5344 |
| HebrewCalendar | FirstFullWeek | 17/09/1583 a 23/09/1583 | 01/01/5344 a 07/01/5344 |
| HebrewCalendar | FirstFourDayWeek | 17/09/1583 a 20/09/1583 | 01/01/5344 a 04/01/5344 |
| HijriCalendar | FirstFullWeek | 18/07/0622 a 24/07/0622 | 01/01/0001 a 07/01/0001 |
| HijriCalendar | FirstFourDayWeek | 18/07/0622 a 21/07/0622 | 01/01/0001 a 04/01/0001 |
| JapaneseLunisolarCalendar | FirstFullWeek | 28/01/1960 a 03/02/1960 | 01/01/35 a 07/01/0035 |
| JapaneseLunisolarCalendar | FirstFourDayWeek | 28/01/1960 a 31/01/1960 | 01/01/0035 a 04/01/0035 |
| JulianCalendar | FirstFullWeek | 1/01/0001 a 1/05/0001 | 03/03/0001 a 07/07/0001 |
| JulianCalendar | FirstFourDayWeek | 1/01/0001 a 02/1/0001 | 03/03/0001 a 04/04/0001 |
| KoreanLunisolarCalendar | FirstFullWeek | 14/02/0918 a 20/2/0918 | 01/01/0918 a 07/01/0918 |
| KoreanLunisolarCalendar | FirstFourDayWeek | 14/02/0918 a 17/02/0918 | 01/01/0918 a 04/01/0918 |
| PersianCalendar | FirstFullWeek | 21/03/0622 a 27/03/0622 | 01/01/0001 a 07/01/0001 |
| PersianCalendar | FirstFourDayWeek | 21/03/0622 a 24/03/0622 | 01/01/0001 a 04/01/0001 |
| TaiwanLunisolarCalendar | FirstFullWeek | 18/02/1912 a 24/02/1912 | 01/01/0001 a 07/01/0001 |
| TaiwanLunisolarCalendar | FirstFourDayWeek | 18/02/1912 a 21/02/1912 | 01/01/0001 a 04/01/0001 |
| UmAlQuraCalendar | FirstFullWeek | 30/04/1900 a 06/05/1900 | 01/01/1318 a 07/01/1318 |
| UmAlQuraCalendar | FirstFourDayWeek | 30/04/1900 a 03/05/1900 | 01/01/1318 a 04/01/1318 |