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 日 | 去年的最後一周 | 去年的最後一周 | 去年的最後一周 |
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 日 Mon | 第 2 週 | 第 1 週 | 第 2 週 |
1 月 8 日 | 第 2 週 | 第 1 週 | 第 2 週 |
1 月 9 日 | 第 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。 Microsoft .NET 中的部落格文章 ISO 8601 Year 格式會討論這些差異。 從 .NET Core 3.0 開始, ISOWeek.GetYear 並 ISOWeek.GetWeekOfYear 解決此問題。
每個 CultureInfo 物件都支援一組行事曆。 屬性 Calendar 會傳回文化特性的預設行事曆,而 OptionalCalendars 屬性會傳回陣列,其中包含文化特性支援的所有行事曆。 若要變更 所使用的 CultureInfo行事曆,請將 Calendar 的 CultureInfo.DateTimeFormat 屬性設定為新的 Calendar。