如何:创建不含调整规则的时区
由于多种原因,特定系统可能不存在应用程序所需的精确时区信息:
从未在本地系统的注册表中定义时区。
有关时区的数据已修改或已从注册表中删除。
时区存在,但没有关于特定历史时间段的时区调整的准确信息。
在这些情况下,可以调用 CreateCustomTimeZone 方法来定义应用程序所需的时区。 可以使用此方法的重载创建带有或不带调整规则的时区。 如果时区支持夏令时,可以使用固定或浮动调整规则定义调整。 (若要了解这些术语的定义,请参阅时区概述中的“时区术语”部分。)
重要
通过调用 CreateCustomTimeZone 方法创建的自定义时区不会添加到注册表中。 而是仅能通过 CreateCustomTimeZone 方法调用返回的对象引用访问这些时区。
本主题说明如何创建不含调整规则的时区。 若要创建支持夏令时调整规则的时区,请参阅如何:创建含调整规则的时区。
创建不含调整规则的时区
定义时区的显示名称。
显示名称遵循非常标准的格式,其中时区相对于协调世界时 (UTC) 的偏移括在括号中,后跟一个字符串,用于标识时区、时区中的一个或多个城市或时区中的一个或多个国家/地区。
定义时区标准时间的名称。 通常,此字符串也用作时区的标识符。
如果要使用不同于时区标准名称的标识符,请定义时区标识符。
实例化一个 TimeSpan 对象,该对象定义时区相对于 UTC 的偏移。 时间晚于 UTC 的时区采用正偏移量。 时间早于 UTC 的时区采用负偏移量。
调用 TimeZoneInfo.CreateCustomTimeZone(String, TimeSpan, String, String) 方法以实例化新时区。
示例
以下示例定义的是南极洲的莫森的自定义时区,该时区不含调整规则。
string displayName = "(GMT+06:00) Antarctica/Mawson Time";
string standardName = "Mawson Time";
TimeSpan offset = new TimeSpan(06, 00, 00);
TimeZoneInfo mawson = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName);
Console.WriteLine("The current time is {0} {1}",
TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local, mawson),
mawson.StandardName);
Dim displayName As String = "(GMT+06:00) Antarctica/Mawson Time"
Dim standardName As String = "Mawson Time"
Dim offset As TimeSpan = New TimeSpan(06, 00, 00)
Dim mawson As TimeZoneInfo = TimeZoneInfo.CreateCustomTimeZone(standardName, offset, displayName, standardName)
Console.WriteLine("The current time is {0} {1}", _
TimeZoneInfo.ConvertTime(Date.Now, TimeZoneInfo.Local, mawson), _
mawson.StandardName)
分配给 DisplayName 属性的字符串遵循标准格式,其中,时区与 UTC 之间的偏移量后跟时区的友好说明。
编译代码
此示例需要:
导入以下命名空间:
using System.Collections.Generic; using System.Collections.ObjectModel;
Imports System.Collections.Generic Imports System.Collections.ObjectModel