System.TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule 方法

方法描述

为特定时区创建新的调整规则。

语法定义(C# System.TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule 方法 的用法)

public static TimeZoneInfo..::..AdjustmentRule CreateAdjustmentRule(
	DateTime dateStart,
	DateTime dateEnd,
	TimeSpan daylightDelta,
	TimeZoneInfo..::..TransitionTime daylightTransitionStart,
	TimeZoneInfo..::..TransitionTime daylightTransitionEnd
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
dateStart System-DateTime 调整规则的生效日期。如果 dateStart 参数的值为 DateTime.MinValue.Date,则这是对某时区生效的第一个调整规则。
dateEnd System-DateTime 调整规则生效的最后日期。如果 dateEnd 参数的值为 DateTime.MaxValue.Date,则调整规则没有结束日期。
daylightDelta System-TimeSpan 调整产生的时间更改。将此值添加到时区的 TimeZoneInfo.BaseUtcOffset 属性,以获取与协调世界时 (UTC) 之间正确的白昼偏移量。此值的范围是从 -14 到 14。
daylightTransitionStart System-TimeZoneInfo-TransitionTime 一个对象,定义夏时制的起始时间。
daylightTransitionEnd System-TimeZoneInfo-TransitionTime 一个对象,定义夏时制的结束时间。
返回值 System.TimeZoneInfo.AdjustmentRule 一个对象,表示新的调整规则。

提示和注释

可以使用此方法为自定义时区创建一个或多个调整规则。 然后,将调用此方法返回的 TimeZoneInfo.AdjustmentRule 对象数组作为 adjustmentRules 参数传递给 CreateCustomTimeZone 方法的两个重载。 下面的示例演示此过程。

注意

CreateAdjustmentRule 方法只能用于定义新时区的调整规则;不能将其用于修改现有时区的调整规则。

dateStart 和 dateEnd 参数必须是不包含时间分量的日期值,否则会引发 ArgumentException。 要移除时间分量,可以从日期和时间的 Date 属性检索 DateTime 值,如下列语句所示:

复制

DateTime.MinValue.Date

DateTime.MaxValue.Date

DateTime.Now.Date

dateVariable.Date

dateStart 和 dateEnd 参数的 Kind 属性还必须是 DateTimeKind.Unspecified。

daylightDelta 参数的值范围为 -14 到 14。 daylightDelta 参数的和的范围为 -14 到 14,在 TimeZoneInfo.CreateCustomTimeZone 方法调用中使用的 baseUtcOffset 参数的和也必须必须介于 -14 与 14 之间,否则会引发 InvalidTimeZoneException。

注意

daylightDelta 参数定义时区的标准时间和其夏时制之间的时差。 它不用于定义时区的标准时间与协调世界时 (UTC) 的偏移量。 TimeZoneInfo 类假定与 UTC 的此偏移量在时区的整个生命中是常量。 若要反映非应用调整规则引起的时区与 UTC 的偏移量的变化,必须使用 CreateCustomTimeZone 方法创建新自定义时区。

System.TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule 方法例子

此数组随后将用于 TimeZoneInfo.CreateCustomTimeZone(String, TimeSpan, String, String, String, TimeZoneInfo.AdjustmentRule[]) 方法调用。

// Create alternate Central Standard Time to include historical time zone information
//
// Declare necessary TimeZoneInfo.AdjustmentRule objects for time zone
TimeSpan delta = new TimeSpan(1, 0, 0);
TimeZoneInfo.AdjustmentRule adjustment;
List adjustmentList = new List();
// Declare transition time variables to hold transition time information
TimeZoneInfo.TransitionTime transitionRuleStart, transitionRuleEnd;

// Define end rule (for 1976-2006)
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 10, 5, DayOfWeek.Sunday);
// Define rule (1976-1986)
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 04, 05, DayOfWeek.Sunday);
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1976, 1, 1), new DateTime(1986, 12, 31), delta, transitionRuleStart, transitionRuleEnd);
adjustmentList.Add(adjustment);
// Define rule (1987-2006)  
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 04, 01, DayOfWeek.Sunday);
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1987, 1, 1), new DateTime(2006, 12, 31), delta, transitionRuleStart, transitionRuleEnd);
adjustmentList.Add(adjustment);
// Define rule (2007- )  
transitionRuleStart = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 03, 02, DayOfWeek.Sunday);
transitionRuleEnd = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 11, 01, DayOfWeek.Sunday);
adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(2007, 01, 01), DateTime.MaxValue.Date, delta, transitionRuleStart, transitionRuleEnd);
adjustmentList.Add(adjustment);

// Create custom U.S. Central Standard Time zone         
TimeZoneInfo.CreateCustomTimeZone("Central Standard Time", new TimeSpan(-6, 0, 0), 
                "(GMT-06:00) Central Time (US Only)", "Central Standard Time", 
                "Central Daylight Time", adjustmentList.ToArray());

异常

异常 异常描述
ArgumentException
  • dateStart 或 dateEnd 参数的 Kind 属性不等于 DateTimeKind.Unspecified。
  • daylightTransitionStart 参数等于 daylightTransitionEnd 参数。
  • dateStart 或 dateEnd 参数包含一个时间值。
ArgumentOutOfRangeException
  • dateEnd 早于 dateStart。
  • daylightDelta 小于 -14 或大于 14。
  • daylightDelta 参数的 Milliseconds 属性不等于 0。
  • daylightDelta 参数的 Ticks 属性不等于整秒数。

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4、3.5 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。