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
第一週一律有七天。 根據值的第一周 FirstFourDayWeek
可以有四到七天。
例如,在西曆中,假設一年的第一天 (1 月 1 日) 落在星期二,而一周指定的第一天是星期日。 選取 FirstFullWeek
會將第一個星期日 (1 月 6 日) 定義為年份第一周的開頭。 年份的前五天會被視為去年最後一周的一部分。 相反地,選取 FirstFourDayWeek
會定義一年的第一天, (1 月 1 日) 為一年中第一周的開始,因為從 1 月 1 日到下一個星期日之前的一天有四天以上。
Date | FirstDay | FirstFullWeek | FirstFourDayWeek |
---|---|---|---|
12 月 31 日 Mon | 去年的最後一周 | 去年的最後一周 | 去年的最後一周 |
1 月 1 日星期二 | 第 1 週 | 去年的最後一周 | 第 1 週 |
1 月 2 日 Wed | 第 1 週 | 去年的最後一周 | 第 1 週 |
1 月 3 日 Thu | 第 1 週 | 去年的最後一周 | 第 1 週 |
1 月 4 日星期五 | 第 1 週 | 去年的最後一周 | 第 1 週 |
1 月 5 日星期六 | 第 1 週 | 去年的最後一周 | 第 1 週 |
1 月 6 日 | 第 2 週 | 第 1 週 | 第 2 週 |
1 月 7 日 Mon | 第 2 週 | 第 1 週 | 第 2 週 |
1 月 8 日星期二 | 第 2 週 | 第 1 週 | 第 2 週 |
1 月 9 日 Wed | 第 2 週 | 第 1 週 | 第 2 週 |
1 月 10 日 Thu | 第 2 週 | 第 1 週 | 第 2 週 |
1 月 11 日星期五 | 第 2 週 | 第 1 週 | 第 2 週 |
1 月 12 日星期六 | 第 2 週 | 第 1 週 | 第 2 週 |
假設一年的第一天 (1 月 1 日) 落在星期五,而一周指定的第一天是星期日。 選取 FirstFourDayWeek
會將第一個星期日 (1 月 3 日) 定義為一年的第一周開始,因為從 1 月 1 日到下一個星期日之前的一天少於四天。
Date | FirstDay | FirstFullWeek | FirstFourDayWeek |
---|---|---|---|
12 月 31 日 Thu | 去年的最後一周 | 去年的最後一周 | 去年的最後一周 |
1 月 1 日星期五 | 第 1 週 | 去年的最後一周 | 去年的最後一周 |
1 月 2 日星期六 | 第 1 週 | 去年的最後一周 | 去年的最後一周 |
1 月 3 日 | 第 2 週 | 第 1 週 | 第 1 週 |
1 月 4 日 Mon | 第 2 週 | 第 1 週 | 第 1 週 |
1 月 5 日星期二 | 第 2 週 | 第 1 週 | 第 1 週 |
1 月 6 日 Wed | 第 2 週 | 第 1 週 | 第 1 週 |
1 月 7 日 Thu | 第 2 週 | 第 1 週 | 第 1 週 |
1 月 8 日星期五 | 第 2 週 | 第 1 週 | 第 1 週 |
1 月 9 日星期六 | 第 2 週 | 第 1 週 | 第 1 週 |
下列範例說明 如何使用 CalendarWeekRule 和 DayOfWeek 值來判斷如何指派周數。 在西曆中,20) 13 年 1 月 1 日 (年 1 月 1 日的第一天落在星期二。 如果指定的第一周的第一天是星期日,則第一個星期日 (1 月 6 日) 是第一周的第一天,而星期六 (1 月 5 日) 屬於去年的第二三周。 將行事曆周規則變更為 FirstFourDayWeek
定義星期二 (1 月 1 日) 為一年的第一周開始,因為星期二、1 月 1 日和星期日 6 之間有超過四天。 使用此規則時,1 月 5 日屬於年份的第一周。 針對 2010 年,1 月 1 日落在星期五的一年,將規則套 DayOfWeek.Sunday 用 FirstFourDayWeek
為當周的第一天,會成為一年的第一周 1 月 3 日,因為 2010 年的第一周超過 4 天是 1 月 3 日到 9 日。
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。 部落格文章ISO 8601 Year 格式Microsoft .NET中會討論差異。 從 .NET Core 3.0 開始, ISOWeek.GetYear 並 ISOWeek.GetWeekOfYear 解決此問題。
每個 CultureInfo 物件都支援一組行事曆。 屬性 Calendar 會傳回文化特性的預設行事曆,而 OptionalCalendars 屬性會傳回陣列,其中包含文化特性支援的所有行事曆。 若要變更 所使用的 CultureInfo 行事曆,請將 Calendar 的 CultureInfo.DateTimeFormat 屬性設定為新的 Calendar 。