1

我正在尝试将时间从 UTC 转换为电话的本地时间。为此,我使用以下内容:

if (progress.ActionDateTime.HasValue)
                    progress.ActionDateTime = TimeZoneInfo.ConvertTime(progress.ActionDateTime.Value, TimeZoneInfo.Local);

但是,转换发生后的时间仍然完全相同。这种方法在 WP7 中有效吗?

4

1 回答 1

2

DateTime 不存储有关时区的信息。根据文档TimeZoneInfo.ConvertTime将使用 DateTime.Kind 属性来确定应该如何转换时间:

  • DateTimeKind.Local 和 DateTimeKind.Unspecified:将本地时间转换为 destinationTimeZone 中的时间。
  • DateTimeKind.Utc:将协调世界时 (UTC) 转换为 destinationTimeZone 中的时间。

由于您使用TimeZoneInfo.Local的是第二个参数(指定目标时区),我假设您的 DateTimeKind 是本地的或未指定的。因此,您将本地日期转换为本地日期,这显然是行不通的。

DateTime.ToLocalTime也使用 DateTimeKind。根据文档:

  • Utc:此 DateTime 实例转换为本地时间。
  • 本地:不执行转换。
  • 未指定:此 DateTime 实例假定为 UTC 时间,并且转换的执行如同 Kind 是 Utc。

基本上,虽然TimeZoneInfo.ConvertTime认为 DateTimeKind.Unspecified = Local,但DateTime.ToLocalTime认为 DateTimeKind.Unspecified = Utc。它解释了为什么后者有效而前者无效。

于 2012-12-28T08:43:46.010 回答