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 日 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 週

下列範例說明 如何使用 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。 部落格文章ISO 8601 Year 格式Microsoft .NET中會討論差異。 從 .NET Core 3.0 開始, ISOWeek.GetYearISOWeek.GetWeekOfYear 解決此問題。

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

適用於

另請參閱