CalendarWeekRule 枚举

定义

定义用于确该年第一周的不同规则。

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
继承
CalendarWeekRule
属性

字段

FirstDay 0

指示年的第一周从该年的第一天开始,到所指定周的下一个首日前结束。 值为 0。

FirstFourDayWeek 2

指示年的第一周是第一个在指定的周首日前包含四天或更多天的周。 值为 2。

FirstFullWeek 1

指示年的第一周从所指定周首日的第一个匹配项开始,可以是年的第一天或其后某一天。 值为 1。

注解

CalendarWeekRule 属性返回并由区域性的当前日历用来确定日历周规则的 DateTimeFormatInfo.CalendarWeekRule 枚举的成员。 枚举值还用作 Calendar.GetWeekOfYear 方法的参数。

日历周规则取决于表示一周的第一天的 System.DayOfWeek 值以及 CalendarWeekRule 值。 属性 DateTimeFormatInfo.FirstDayOfWeek 提供区域性的默认值,但任何 DayOfWeek 值都可以在 方法中 Calendar.GetWeekOfYear 指定为一周的第一天。

基于 FirstDay 该值的第一周可以有一到七天。 基于 FirstFullWeek 值的第一周始终有 7 天。 基于 FirstFourDayWeek 该值的第一周可以有四到七天。

例如,在公历中,假设一年中的第一天 (1 月 1 日) 为星期二,而指定的一周的第一天是星期日。 选择 FirstFullWeek 会将 1 月 6 日的第一个星期日 () 定义为一年中第一周的开始。 一年中的前五天被视为前一年最后一周的一部分。 相比之下,选择 FirstFourDayWeek 将一年中的第一天定义为一年 (1 月 1 日) 为一年中第一周的开始,因为从 1 月 1 日到下一个星期日的前一天有 4 天以上。

Date FirstDay FirstFullWeek FirstFourDayWeek
12 月 31 日星期一 上一年的最后一周 上一年的最后一周 上一年的最后一周
1 月 1 日星期二 第 1 周 上一年的最后一周 第 1 周
1 月 2 日周三 第 1 周 上一年的最后一周 第 1 周
1 月 3 日星期四 第 1 周 上一年的最后一周 第 1 周
1 月 4 日星期五 第 1 周 上一年的最后一周 第 1 周
1 月 5 日星期六 第 1 周 上一年的最后一周 第 1 周
1 月 6 日(星期日) 第 2 周 第 1 周 第 2 周
1 月 7 日(星期一) 第 2 周 第 1 周 第 2 周
1 月 8 日星期二 第 2 周 第 1 周 第 2 周
1 月 9 日周三 第 2 周 第 1 周 第 2 周
1 月 10 日星期四 第 2 周 第 1 周 第 2 周
1 月 11 日星期五 第 2 周 第 1 周 第 2 周
1 月 12 日星期六 第 2 周 第 1 周 第 2 周

假设一年中的第一天 (1 月 1 日) 是星期五,指定的一周的第一天是星期日。 选择 FirstFourDayWeek 会将 1 月 3 日 (的第一个星期日) 定义为一年中第一周的开始,因为从 1 月 1 日到下一个星期日的前一天少于 4 天。

Date FirstDay FirstFullWeek FirstFourDayWeek
12 月 31 日星期四 上一年的最后一周 上一年的最后一周 上一年的最后一周
1 月 1 日星期五 第 1 周 上一年的最后一周 上一年的最后一周
1 月 2 日星期六 第 1 周 上一年的最后一周 上一年的最后一周
1 月 3 日(星期日) 第 2 周 第 1 周 第 1 周
1 月 4 日(星期一) 第 2 周 第 1 周 第 1 周
1 月 5 日星期二 第 2 周 第 1 周 第 1 周
1 月 6 日周三 第 2 周 第 1 周 第 1 周
1 月 7 日星期四 第 2 周 第 1 周 第 1 周
1 月 8 日星期五 第 2 周 第 1 周 第 1 周
1 月 9 日星期六 第 2 周 第 1 周 第 1 周

下面的示例阐释如何将 CalendarWeekRuleDayOfWeek 值结合使用来确定分配周的方式。 在公历日历中,2013 年的第一天(1 月 1 日)是星期二。 如果指定的一周中的第一天是星期日,则第一个星期日(1 月 6 日)是该年第一周的第一天,并且星期六(1 月 5 日)属于上一年的第 53 周。 将日历周规则更改为 FirstFourDayWeek 会将星期二(1 月 1 日)定义为该年第一周的开始,因为星期二(1 月 1 日)和星期日(1 月 6 日)之间的天数超过了 4 天。 通过使用此规则,1 月 5 日将属于该年的第一周。 对于 2010 年,该年的 1 月 1 日为星期五,使用 FirstFourDayWeek 规则,并且 DayOfWeek.Sunday 为周中的第一天,星期日(1 月 3 日)为该年第一周的开始,因为 2010 年的第一周为 1 月 3 日到 1 月 9 日,超过了 4 天。

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

注意

这不会完全映射到 ISO 8601。 Microsoft .NET 的博客文章 ISO 8601 Year 周格式中讨论了这些差异。 从 .NET Core 3.0 开始, ISOWeek.GetYearISOWeek.GetWeekOfYear 解决此问题。

每个 CultureInfo 对象都支持一组日历。 属性 Calendar 返回区域性的默认日历,属性 OptionalCalendars 返回包含区域性支持的所有日历的数组。 若要更改 使用的CultureInfo日历,请将 的 CultureInfo.DateTimeFormat 属性设置为Calendar新的 Calendar

适用于

另请参阅