CalendarWeekRule 枚举
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
定义用于确该年第一周的不同规则。
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
- 继承
- 属性
字段
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 周 |
下面的示例阐释如何将 CalendarWeekRule 和 DayOfWeek 值结合使用来确定分配周的方式。 在公历日历中,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.GetYear 并 ISOWeek.GetWeekOfYear 解决此问题。
每个 CultureInfo 对象都支持一组日历。 属性 Calendar 返回区域性的默认日历,属性 OptionalCalendars 返回包含区域性支持的所有日历的数组。 若要更改 使用的CultureInfo日历,请将 的 CultureInfo.DateTimeFormat 属性设置为Calendar新的 Calendar。