在Windows Mobile 6上使用Compact Framework设置时区

时间:2009-06-12 00:56:43

标签: c# compact-framework timezone

首先,背景:我有一个在Windows Mobile 6设备(IPAQ 210s)上以kiosk模式运行的.Net应用程序。我们的软件实际上独立于操作系统跟踪用户的时区,因此我们根据UTC的时区调整计算显示的时间。许多人可能知道,真正的自助服务终端模式在Windows Mobile 6上并不容易实现,而此应用程序的最后一个难题是抑制来自操作系统的DST通知。

我首选的解决方案是将设备时区设置为GMT Casablanca,因为它没有观察到DST。然而,我发现尽管我付出了最大的努力(包括使用OpenNETCF库),但我无法在设备配置过程中获得可靠的时区。在操作系统的日期/时间小程序中,看起来就像时区是GMT一样,但时间与该时区的时间相差一点。

任何人都可以提供有关如何使时区更改正确的建议吗?或者,更好的是,有没有人知道如何在WinMob 6上禁用DST通知?

5 个答案:

答案 0 :(得分:3)

无论出于何种原因,CF实际上在启动时缓存时区信息(我认为完整的框架也是如此)。因此,当您更改时区时,CF不会意识到这些更改。如果您使用GetSystem / LocalTime API,您将获得正确的时间,但DateTime.Now将不会反映这些更改。

I reported this back in 2004

在桌面上,您使用TimezoneInfo.ClearCachedInfo方法,但它不存在于CF中。

答案 1 :(得分:1)

您可以在注册表中进行设置。只需设置HKLM \ Time \ TimeZoneInformation值即可。 还有一个功能可以解决:SetTimeZoneInformation

答案 2 :(得分:1)

我在更改时区时遇到了一个错误,但在eVC中还没有CF。最后,我决定将设备的时区从DST中的时区更改为不在夏令时的时区。它似乎在我们标准时间的一年中正常工作但在夏令时时失败了。很烦人。

最后,我最终设置了两次时区和时间。它(通常)第二次正确。

答案 3 :(得分:0)

我在Windows Mobile 5中遇到过相同的一小时DST错误。问题似乎与操作系统相关,而不是与.NET相关,因为我使用的是SetSystemTime API调用在设备上,传递服务器的DateTime.UtcNow值(始终是准确的,永远不会一小时关闭)。我无法进一步追踪问题,因为我们决定将所有设备设置为与服务器相同的时区。仅在设置为与服务器不同的时区的设备上设置系统时间时才会出现此错误。

我从未在任何地方看到此问题,尽管进行了大量搜索,这意味着以下情况之一:

  1. 大多数WinMo设备用户手动设置自己的时间和时区,因此这个问题永远不会出现
  2. 问题是特定于构建而不是一般特定于操作系统(我看到的问题出现在iPAQ上,但我不记得是否尝试在其他设备上重现问题)。
  3. 我临床上疯了,这从来没有真正发生过

答案 4 :(得分:0)

我成功使用了OpenNETCF.WindowsCE.DateTimeHelper类。 我的平台:

Windows Mobile 6.1

CF 3.5