TimeZone.ToLocalTime(DateTime) 方法

定义

返回对应于指定日期和时间值的本地时间。

public:
 virtual DateTime ToLocalTime(DateTime time);
public virtual DateTime ToLocalTime (DateTime time);
abstract member ToLocalTime : DateTime -> DateTime
override this.ToLocalTime : DateTime -> DateTime
Public Overridable Function ToLocalTime (time As DateTime) As DateTime

参数

time
DateTime

协调世界时 (UTC) 时间。

返回

一个 DateTime 对象,其值为对应于 time 的本地时间。

注解

下表显示了 参数与DateTime此方法返回的值之间的关系time

time 参数 行为 返回值
协调世界时 (UTC) 时间 (DateTimeKind.Utc) 。 将时间从 UTC 转换为本地时间。 一个 DateTime 对象,其值为对应于 time 的本地时间。
本地时间 (DateTimeKind.Local) 。 无需转换。 参数表示的time相同DateTime值。
未指定的时间 (DateTimeKind.Unspecified) 。 假定时间是 UTC,并将其从 UTC 转换为本地时间。 一个 DateTime 对象,其值为对应于 time 的本地时间。

如果本地时区遵守夏令时, ToLocalTime 则执行转换时将当前调整规则 time 应用于 。

注意

方法 ToLocalTime 仅识别本地时区的当前夏令时调整规则。 因此,保证仅在最新调整规则生效期间准确返回对应于特定 UTC 时间的本地时间。 如果 time 是受先前调整规则约束的历史日期和时间值,则可能会返回不准确的结果。

方法 ToLocalTime 对应于 方法, TimeZoneInfo.ConvertTimeFromUtcdestinationTimeZone 参数设置为 TimeZoneInfo.Local。 尽可能使用 TimeZoneInfo.ConvertTimeFromUtc 方法。

继承者说明

尽管这不是必需的,但在大多数情况下,在 .NET Framework 版本 2.0 下运行的派生类应替代此方法的默认实现。 在.NET Framework版本 1.0 和 1.1 中ToLocalTime,方法调用 GetUtcOffset(DateTime) 方法,并在返回本地时间时针对夏令时进行调整。 但是,从 .NET Framework 2.0 开始,默认实现的行为取决于 Kind 参数的 time 属性。 如果其值为 Local,则此方法返回 time 不变。 如果其值为 UtcUnspecified,则此方法假定 time 为 UTC,并将它转换为本地系统时间,而无需调用 GetUtcOffset(DateTime) 方法。

以下代码提供了 方法的默认实现的 ToLocalTime 简单替代。 在此代码中 internalTimeZone , 变量表示 类的 TimeZone 私有实例:

public override DateTime ToLocalTime(DateTime time)
{
   if (time.Kind == DateTimeKind.Local)
   {
      return time;
   }
   else if (time.Kind == DateTimeKind.Utc)
   {
      DateTime returnTime = new DateTime(time.Ticks, DateTimeKind.Local);
      returnTime += this.GetUtcOffset(returnTime);
      if (internalTimeZone.IsDaylightSavingTime(returnTime))
         returnTime -= new TimeSpan(1, 0, 0);
      return returnTime;
   }      
   else
   {
      throw new ArgumentException("The source time zone cannot be determined.");
   }      
}
Public Overrides Function ToLocalTime(time As Date) As Date
   If time.Kind = DateTimeKind.Local Then
      Return time
   ElseIf time.Kind = DateTimeKind.Utc Then
      Dim returnTime As New Date(time.Ticks, DateTimeKind.Local)
      returnTime += me.GetUtcOffset(returnTime)
      if internalTimeZone.IsDaylightSavingTime(returnTime) Then
         returnTime -= New TimeSpan(1, 0, 0)
      End If
      Return returnTime      
   Else
      Throw New ArgumentException("The source time zone cannot be determined.")
   End If      
End Function

适用于

另请参阅