TimeZone.ToLocalTime(DateTime) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
返回对应于指定日期和时间值的本地时间。
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.ConvertTimeFromUtc 其 destinationTimeZone
参数设置为 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
不变。 如果其值为 Utc 或 Unspecified,则此方法假定 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