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 第一週一律有七天。 以值為基礎的 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 週

下列範例說明 如何使用 CalendarWeekRuleDayOfWeek 值來判斷如何指派周數。 在公曆中,20) 13 年 1 月 1 日 (年 1 月 1 日的第一天落在星期二。 如果指定的第一周是星期日,則第一個星期日 (1 月 6 日) 是第一周的第一天,而星期六 (1 月 5 日) 屬於上一年的第二三周。 將行事曆周規則變更為 FirstFourDayWeek 定義星期二 (1 月 1 日) 為一年中第一周的開頭,因為星期二、1 月 1 日和星期日 6 之間有超過四天。 使用此規則時,1 月 5 日屬於年份的第一周。 針對 2010 年,1 月 1 日落在星期五的一年,將規則套DayOfWeek.SundayFirstFourDayWeek為當周的第一天,使星期日 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.GetYearISOWeek.GetWeekOfYear 解決此問題。

每個 CultureInfo 物件都支援一組行事曆。 屬性 Calendar 會傳回文化特性的預設行事曆,而 OptionalCalendars 屬性會傳回陣列,其中包含文化特性支援的所有行事曆。 若要變更 所使用的 CultureInfo行事曆,請將 CalendarCultureInfo.DateTimeFormat 屬性設定為新的 Calendar

適用於

另請參閱