如何:创建不含调整规则的时区

由于多种原因,特定系统可能不存在应用程序所需的精确时区信息:

  • 从未在本地系统的注册表中定义时区。

  • 有关时区的数据已修改或已从注册表中删除。

  • 时区存在,但没有关于特定历史时间段的时区调整的准确信息。

在这些情况下,可以调用 CreateCustomTimeZone 方法来定义应用程序所需的时区。 可以使用此方法的重载创建带有或不带调整规则的时区。 如果时区支持夏令时,可以使用固定或浮动调整规则定义调整。 (若要了解这些术语的定义,请参阅时区概述中的“时区术语”部分。)

重要

通过调用 CreateCustomTimeZone 方法创建的自定义时区不会添加到注册表中。 而是仅能通过 CreateCustomTimeZone 方法调用返回的对象引用访问这些时区。

本主题说明如何创建不含调整规则的时区。 若要创建支持夏令时调整规则的时区,请参阅如何:创建含调整规则的时区

创建不含调整规则的时区

  1. 定义时区的显示名称。

    显示名称遵循非常标准的格式,其中时区相对于协调世界时 (UTC) 的偏移括在括号中,后跟一个字符串,用于标识时区、时区中的一个或多个城市或时区中的一个或多个国家/地区。

  2. 定义时区标准时间的名称。 通常,此字符串也用作时区的标识符。

  3. 如果要使用不同于时区标准名称的标识符,请定义时区标识符。

  4. 实例化一个 TimeSpan 对象,该对象定义时区相对于 UTC 的偏移。 时间晚于 UTC 的时区采用正偏移量。 时间早于 UTC 的时区采用负偏移量。

  5. 调用 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
    
    

另请参阅