【问题标题】:Date time is not changing in wpf when the zone changed区域更改时,wpf 中的日期时间没有更改
【发布时间】:2020-09-16 13:53:38
【问题描述】:

我有来自服务器的日期时间。我需要根据机器区域更改那个时间。我正在使用以下代码来实现这一点,但时间没有改变。

 DateTime utcTime = DateTime.SpecifyKind(DateTime.Parse(UserDateTime.ToString()), DateTimeKind.Utc);
 TimeZoneInfo localZone = TimeZoneInfo.Local;
 var time= TimeZoneInfo.ConvertTimeFromUtc(utcTime , localZone);

但是当我选择另一个区域时,时间并没有根据选择的区域而变化。

我期待的是,如果我将 DateTime 设为:16-09-2020 07:21 作为服务器时间,当我将机器中的区域更改为 London 时,日期必须显示为相关时间(16-09-2020 02:51)。

请指导我实现这一目标。

【问题讨论】:

  • 服务器在哪个时区? UTC 和英国时间之间从来没有 5 小时。您必须知道从服务器获得的时间戳的时区才能进行转换。
  • 你不应该创建一个字符串只是为了再次解析它。您的整个代码可以压缩为var time = TimeZoneInfo.ConvertTimeFromUtc(UserDateTime, TimeZoneInfo.Local);。那是你要的吗?另外,“来自服务器”的具体含义是什么?这与 WPF 有什么关系?

标签: wpf time timezone


【解决方案1】:

有一种ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo) 方法可以将时间从一个时区转换为另一个时区。

显然,您需要知道要从哪个时区转换以及要转换到哪个时区。

如果您从 UTC 转换,还有一个 TimeZoneInfo.ConvertTimeFromUtc 方法。以下代码 sn-p 在 UTC 和英国时间之间转换:

DateTime utcTime = new DateTime(2020, 9, 16, 07, 21, 00);
DateTime londonTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime,
    TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"));

【讨论】:

    猜你喜欢
    • 2017-04-18
    • 2011-06-06
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多