CalendarWeekRule 枚举

定义

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

C#
public enum CalendarWeekRule
C#
[System.Serializable]
public enum CalendarWeekRule
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
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 该值的第一周可以有 4 到 7 天。

例如,在公历中,假设一年中的第一天 (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 天。

C#
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

备注

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

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

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

另请参阅