如何:创建不带调整规则的时区
更新:2007 年 11 月
在特定的系统上,应用程序需要的精确时区信息可能不存在,这有多种原因:
本地系统的注册表中从未定义该时区。
有关该时区的数据已被修改或已从注册表中移除。
该时区存在,但它不具有与特定历史时期的时区调整有关的信息。
在这些情况下,可以调用 CreateCustomTimeZone 方法定义应用程序所需的时区。您可以使用此方法的重载创建带有或不带调整规则的时区。如果该时区支持夏时制,则可以用固定调整规则或浮动调整规则来定义调整方式 (有关这些术语的定义,请参见时区概述中的“时区术语”一节)。
重要说明: |
---|
通过调用 CreateCustomTimeZone 方法创建的自定义时区不会被添加到注册表中。它们只能通过由 CreateCustomTimeZone 方法调用返回的对象引用进行访问。 |
本主题介绍如何创建不带调整规则的时区。若要创建支持夏时制调整规则的时区,请参见如何:创建带有调整规则的时区。
创建不带调整规则的时区
定义时区的显示名称。
显示名称应遵循相对标准的格式,其中时区的协调世界时 (UTC) 偏移量用括号括起来,后面是一个字符串,用于标识时区、该时区中的一个或多个城市或者该时区中的一个或多个国家/地区。
定义时区的标准时间名称。此字符串通常还用作时区的标识符。
如果要使用不同于时区标准名称的标识符,请定义时区标识符。
实例化定义时区的 UTC 偏移量的 TimeSpan 对象。时间晚于 UTC 的时区有正偏移值。时间早于 UTC 的时区有负偏移值。
调用 TimeZoneInfo.CreateCustomTimeZone(String, TimeSpan, String, String) 方法可实例化新时区。
示例
下面的示例定义了一个南极莫森自定义时区,此时区不带调整规则。
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)
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);
分配给 DisplayName 属性的字符串遵循一种标准格式,其中先是时区的 UTC 偏移量,后面跟有该时区的友好说明。
编译代码
此示例要求:
在项目中添加一个对 System.Core.dll 的引用。
导入下列命名空间:
Imports System.Collections.Generic Imports System.Collections.ObjectModel
using System.Collections.Generic; using System.Collections.ObjectModel;