System.TimeZoneInfo.ConvertTime 方法 (DateTime, TimeZoneInfo, TimeZoneInfo)

方法描述

将时间从一个时区转换为另一个时区。

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

public static DateTime ConvertTime(
	DateTime dateTime,
	TimeZoneInfo sourceTimeZone,
	TimeZoneInfo destinationTimeZone
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
dateTime System-DateTime 要转换的日期和时间。
sourceTimeZone System-TimeZoneInfo dateTime 的时区。
destinationTimeZone System-TimeZoneInfo 要将 dateTime 转换到的时区。
返回值 System.DateTime 目标时区中与源时区中的 dateTime 参数对应的日期和时间。

提示和注释

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

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

DateTime.Kind 值

sourceTimeZone 值

方法行为

DateTimeKind.Utc

等于 TimeZoneInfo.Utc。

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

DateTimeKind.Utc

不等于 TimeZoneInfo.Utc。

引发 ArgumentException。

DateTimeKind.Local

等于 TimeZoneInfo.Local。

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

DateTimeKind.Local

不等于 TimeZoneInfo.Local。

引发 ArgumentException。

DateTimeKind.Unspecified

任意。

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

您还可以通过调用 ConvertTimeFromUtc 和 ConvertTimeToUtc 方法转换成协调世界时 (UTC) 或从 UTC 进行转换。

如下表所示设置返回的 DateTime 值的 Kind 属性。

Condition

返回的 Kind 属性值

destinationTimeZone 参数为 TimeZoneInfo.Utc。

DateTimeKind.Utc

dateTime 的 Kind 属性为 DateTimeKind.Local,并且 sourceTimeZone 和 destinationTimeZone 都是 DateTimeKind.Local。

DateTimeKind.Local

所有其他日期和时间值、源时区以及目标时区。

DateTimeKind.Unspecified

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

如果 dateTime 的转换结果为早于 DateTime.MinValue 或晚于 DateTime.MaxValue 的日期和时间值,则此方法分别返回 DateTime.MinValue 或 DateTime.MaxValue。

对调用者的说明

在 Windows XP 系统中,如果把 dateTime 视为本地时间,如果 sourceTimeZone 是 TimeZoneInfo.Local,或者如果 destinationTimeZone 是 TimeZoneInfo.Local,那么该方法执行转换时只会应用当前的调整规则。 因此,该方法在当前调整规则生效之前可能无法准确转换时间段。 有关更多信息,请参见 Local 属性中的“调用方说明”一节。

System.TimeZoneInfo.ConvertTime 方法 (DateTime, TimeZoneInfo, TimeZoneInfo)例子

下面的示例阐释如何使用 ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) 方法将夏威夷标准时间转换为本地时间。

DateTime hwTime = new DateTime(2007, 02, 01, 08, 00, 00);
try
{
   TimeZoneInfo hwZone = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
   Console.WriteLine("{0} {1} is {2} local time.", 
           hwTime, 
           hwZone.IsDaylightSavingTime(hwTime) ? hwZone.DaylightName : hwZone.StandardName, 
           TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local));
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The registry does not define the Hawaiian Standard Time zone.");
}                           
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the Hawaiian STandard Time zone has been corrupted.");
}

异常

异常 异常描述
ArgumentException
  • dateTime 参数的 Kind 属性为 DateTimeKind.Local,但 sourceTimeZone 参数不等于 DateTimeKind.Local。
  • dateTime 参数的 Kind 属性为 DateTimeKind.Utc,但 sourceTimeZone 参数不等于 TimeZoneInfo.Utc。
  • dateTime 参数为无效时间(即,它表示因时区的调整规则而不存在的时间)。
ArgumentNullException
  • sourceTimeZone 参数为 null。
  • destinationTimeZone 参数为 null。

命名空间

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