System.TimeZoneInfo.CreateCustomTimeZone 方法 (String, TimeSpan, String, String, String, TimeZoneInfo.AdjustmentRule[], Boolean)

方法描述

创建带指定标识符的自定义时区、与协调世界时 (UTC) 的偏移量、显示名称、标准时间名称、夏时制名称、夏时制规则以及指示返回的对象是否反映夏时制信息的值。

语法定义(C# System.TimeZoneInfo.CreateCustomTimeZone 方法 (String, TimeSpan, String, String, String, TimeZoneInfo.AdjustmentRule[], Boolean) 的用法)

public static TimeZoneInfo CreateCustomTimeZone(
	string id,
	TimeSpan baseUtcOffset,
	string displayName,
	string standardDisplayName,
	string daylightDisplayName,
	TimeZoneInfo..::..AdjustmentRule[] adjustmentRules,
	bool disableDaylightSavingTime
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
id System-String 时区标识符。
baseUtcOffset System-TimeSpan 一个 TimeSpan 对象,表示此时区和协调世界时 (UTC) 之间的时差。
displayName System-String 新时区的显示名称。
standardDisplayName System-String 新时区的标准时间名称。
daylightDisplayName System-String 新时区的夏时制名称。
adjustmentRules System-TimeZoneInfo-AdjustmentRule[] 一个 TimeZoneInfo.AdjustmentRule 对象的数组,这些对象增加特定期间的基本 UTC 偏移量。
disableDaylightSavingTime System-Boolean 如果为 true,则丢弃包含新对象的 adjustmentRules 中与夏时制相关的所有信息;否则为 false。
返回值 System.TimeZoneInfo 新时区。 如果 disableDaylightSavingTime 参数为 true,则返回的对象没有夏时制数据。

提示和注释

可以使用此 TimeZoneInfo.CreateCustomTimeZone 方法重载创建可由运行时的条件确定其是否支持夏时制的自定义时区。

下表显示提供给 TimeZoneInfo.CreateCustomTimeZone 方法的参数与该方法调用返回的 TimeZoneInfo 对象成员之间的关系。

CreateCustomTimeZone 参数

TimeZoneInfo 属性

id

Id

baseUtcOffset

BaseUtcOffset

displayName

DisplayName

standardDisplayName

StandardName

daylightDisplayName

如果 disableDaylightSavingTime 为 false,则为 DaylightName;如果 disableDaylightSavingTime 为 true,则为 String.Empty。

adjustmentRules

如果 disableDaylightSavingTime 为 false,则为 GetAdjustmentRules 方法返回的 TimeZoneInfo.AdjustmentRule 对象的数组;如果 disableDaylightSavingTime 为 true,则为 GetAdjustmentRules 方法返回的空数组。

disableDaylightSavingTime

非 SupportsDaylightSavingTime。

通常,时区的标准时间名称与其标识符是相同的。 但时区标识符的长度不应超过 32 个字符。 传递给 displayName 参数的字符串遵循相当标准的格式。 显示名称的第一部分是时区与协调世界时的基本偏移量,以首字母缩略词 GMT(表示格林尼治标准时间)表示并括在括号内。 随后的字符串标识时区本身以及/或者时区中的一个或多个城市、地区或国家。 例如:

复制

(GMT+02:00) Athens, Beirut, Istanbul, Minsk

(GMT-02:00) Mid-Atlantic

(GMT-07:00) Mountain Time (US & Canada)

可通过以下操作来定义时区的调整规则:

调用 CreateFloatingDateRule 或 CreateFixedDateRule 方法来定义每个调整规则的开始和结束转换规则。

为每个调整规则调用 CreateAdjustmentRule 方法。

将调整规则分配给可作为 adjustmentRules 参数传递的数组。

如果 disableDaylightSavingTime 参数为 false,则此方法的使用等效于 TimeZoneInfo.CreateCustomTimeZone 重载。 如果 disableDaylightSavingTime 为 true,则返回的对象不包括调整规则和值为空字符串的 DaylightName 属性。

System.TimeZoneInfo.CreateCustomTimeZone 方法 (String, TimeSpan, String, String, String, TimeZoneInfo.AdjustmentRule[], Boolean)例子

然后该示例显示新时区的夏时制名称(如果有)和调整规则数,以确认新时区没有夏时制信息。

// Define transition times to/from DST
TimeZoneInfo.TransitionTime startTransition, endTransition;
startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 4, 0, 0),
                                                                  10, 2, DayOfWeek.Sunday); 
endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1,3, 0, 0), 
                                                                3, 2, DayOfWeek.Sunday);
// Define adjustment rule
TimeSpan delta = new TimeSpan(1, 0, 0);
TimeZoneInfo.AdjustmentRule adjustment = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule(new DateTime(1999, 10, 1), 
                                      DateTime.MaxValue.Date, delta, startTransition, endTransition);
// Create array for adjustment rules
TimeZoneInfo.AdjustmentRule[] adjustments = {adjustment};
// Define other custom time zone arguments
string displayName = "(GMT-04:00) Antarctica/Palmer Time";
string standardName = "Palmer Standard Time";
string daylightName = "Palmer Daylight Time";
TimeSpan offset = new TimeSpan(-4, 0, 0);
// Create custom time zone without copying DST information
TimeZoneInfo palmer = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName, 
                                                  daylightName, adjustments, true);
// Indicate whether new time zone//s adjustment rules are present
Console.WriteLine("{0} {1}has {2} adjustment rules.", 
                  palmer.StandardName, 
                  ! (string.IsNullOrEmpty(palmer.DaylightName)) ?  "(" + palmer.DaylightName + ") ": "" , 
                  palmer.GetAdjustmentRules().Length);
// Indicate whether new time zone supports DST
Console.WriteLine("{0} supports DST: {1}", palmer.StandardName, palmer.SupportsDaylightSavingTime);

异常

异常 异常描述
ArgumentNullException id 参数为 null。
ArgumentException
  • id 参数是空字符串 ("")。
  • baseUtcOffset 参数不表示整分钟数。
ArgumentOutOfRangeException baseUtcOffset 参数大于 14 小时或小于 -14 小时。
InvalidTimeZoneException
  • 在 adjustmentRules 参数中指定的调整规则重叠。
  • 在 adjustmentRules 参数中指定的调整规则不是按时间顺序排列。
  • adjustmentRules 中的一个或多个元素为 null。
  • 一个日期可以有多个应用于该日期的调整规则。
  • baseUtcOffset 参数与 adjustmentRules 数组中一个或多个对象的 TimeZoneInfo.AdjustmentRule.DaylightDelta 值的和大于 14 小时或小于 -14 小时。

命名空间

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 系统要求。