【问题标题】:Changing timezone in Windows is not reflected in C# TimeZone calls在 Windows 中更改时区不会反映在 C# TimeZone 调用中
【发布时间】:2017-08-23 23:31:09
【问题描述】:

在 Windows 7 上。我在 PST 时区。我将 Windows 中的时区更改为东部,然后在 LinqPad 中执行:

 TimeZoneInfo tzinfo = TimeZoneInfo.Local;
 tzinfo.Dump();

 TimeZone localZone = TimeZone.CurrentTimeZone;
  localZone.Dump();

为什么不显示东部时区,为什么一个结构显示太平洋时区而另一个显示东部时区?

【问题讨论】:

  • 代码可能没有重新编译。 LinqPad 只是一个模拟器,编译时可能会占用时区。
  • 我验证了你所说的并在VS中进行了测试,它显示了两个东方。好吧,这对 Linqpad 很恼火。除了重新启动之外,您如何在 Linqpad 中强制重新编译?
  • 更改代码,它会重新编译。
  • 哦,还有一个名为“每次执行时始终使用新鲜进程”的设置,你可以打开。
  • 谢谢。您可以将您的评论作为答案。

标签: c# .net timezone


【解决方案1】:

.NET 缓存本地时区。如果您需要确保考虑到用户可能进行的更改,则需要在获取本地时区之前致电 TimeZoneInfo.ClearCachedData()

来自 MSDN 文档(重点是我的):

缓存的时区数据包括本地时区、协调世界时 (UTC) 时区以及使用 FindSystemTimeZoneByIdGetSystemTimeZones 等方法检索到的任何时区数据。

您可以调用ClearCachedData 方法来减少专用于应用程序缓存时区信息的内存或反映本地系统的时区已更改的事实

这可能也适用于 LinqPad。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-13
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2012-03-22
    • 1970-01-01
    相关资源
    最近更新 更多