System.TimeZoneInfo.ConvertTimeBySystemTimeZoneId 方法 (DateTime, String, String)

方法描述

根据时区标识符将时间从一个时区转换到另一个时区。

语法定义(C# System.TimeZoneInfo.ConvertTimeBySystemTimeZoneId 方法 (DateTime, String, String) 的用法)

public static DateTime ConvertTimeBySystemTimeZoneId(
	DateTime dateTime,
	string sourceTimeZoneId,
	string destinationTimeZoneId
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
dateTime System-DateTime 要转换的日期和时间。
sourceTimeZoneId System-String 源时区的标识符。
destinationTimeZoneId System-String 目标时区的标识符。
返回值 System.DateTime 目标时区中与源时区中的 dateTime 参数对应的日期和时间。

提示和注释

执行转换时,ConvertTimeBySystemTimeZoneId 方法将有效应用 destinationTimeZoneId 时区中的任何调整规则。

尽管与 TimeZoneInfo.ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) 方法类似,但您可以使用 TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime, String, String) 并通过其标识符而不是其 TimeZoneInfo 对象来指定源时区和目标时区。 如果您必须转换时间而不检索与该时间相对应的时区对象,并且不需要知道转换后的时间是标准时间还是夏时制时间,则此方法非常有用。

此方法检索标识符是来自注册表的 sourceTimeZoneId 和 destinationTimeZoneId 参数的时区。 它不能检索使用 CreateCustomTimeZone 方法创建的时区对象。

dateTime 参数的 Kind 属性值必须对应于 sourceTimeZoneId 参数,如下表所示。

DateTime.Kind 值

sourceTimeZone 值

方法行为

DateTimeKind.Utc

等于 TimeZoneInfo.Utc.Id。

将 dateTime 转换为目标时区的时间。

DateTimeKind.Utc

不等于 TimeZoneInfo.Utc.Id。

引发 ArgumentException。

DateTimeKind.Local

等于 TimeZoneInfo.Local.Id。

将 dateTime 转换为目标时区的时间。

DateTimeKind.Local

不等于 TimeZoneInfo.Local.Id。

引发 ArgumentException。

DateTimeKind.Unspecified

任意。

将 dateTime 转换为目标时区的时间。

由于 ConvertTimeBySystemTimeZoneId 方法依赖于对 FindSystemTimeZoneById 方法的调用,因此前者执行不区分大小写的搜索,以查找与 sourceTimeZoneId 和 destinationTimeZoneId 相对应的时区。

如果 dateTime 参数值是源时区中的不明确时间,则将该时间解释为标准时间。 如果 dateTime 参数是源时区中的无效时间,则此方法会引发 ArgumentException。

将返回的 DateTime 值的 Kind 属性设置为 DateTimeKind.Unspecified,除非目标时区为协调世界时 (UTC),在该情况下将该属性设置为 DateTimeKind.Utc。

System.TimeZoneInfo.ConvertTimeBySystemTimeZoneId 方法 (DateTime, String, String)例子

下面的示例使用 TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime, String, String) 方法显示对应于世界上八个城市的本地系统时间的时间。

DateTime currentTime = DateTime.Now;
Console.WriteLine("Current Times:");
Console.WriteLine();
Console.WriteLine("Los Angeles: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Pacific Standard Time"));
Console.WriteLine("Chicago: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Central Standard Time"));
Console.WriteLine("New York: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Eastern Standard Time"));
Console.WriteLine("London: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "GMT Standard Time"));
Console.WriteLine("Moscow: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Russian Standard Time"));
Console.WriteLine("New Delhi: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "India Standard Time"));
Console.WriteLine("Beijing: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "China Standard Time"));
Console.WriteLine("Tokyo: {0}", 
                  TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, "Tokyo Standard Time"));

异常

异常 异常描述
ArgumentException
  • dateTime 参数的 Kind 属性与源时区不对应。
  • dateTime 是源时区中的无效时间。
ArgumentNullException
  • sourceTimeZoneId 为 null。
  • destinationTimeZoneId 为 null。
InvalidTimeZoneException 已找到时区标识符,但注册表数据已损坏。
SecurityException 进程没有读取包含时区信息的注册表项所需的权限。
TimeZoneNotFoundException
  • 在本地系统上找不到 sourceTimeZoneId 标识符。
  • 在本地系统上找不到 destinationTimeZoneId 标识符。
SecurityException 用户没有读取包含时区数据的注册表项所需的权限。

命名空间

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