8

我有点迷失在时区:)

我将数据与 UTC 时间一起存储。服务器在荷兰,所以我们住在 utc+1(现在,夏令时,在 utc+2)

现在一个客户说:给我 8 月 5 日的数据。

所以我必须从“他的时间”计算UTC时间。为此,我必须知道:

您的 UTC 偏移量是多少(我们将其存储在他的个人资料中,比如说 utc -6)您是否处于夏令时(因为我们必须添加 +1 并使 utc 偏移量为 -5)

然后我的问题:

  1. 请问.Net框架:XX国有夏令时吗?

  2. 我可以问.Net框架:当时XXX夏令时是08-05-2010T00:00:00吗?

我一直在尝试.ToLocalTime(),但这只会给我服务器上的本地时间,这不是我想要的,我想用用户的时区来计算,而且在那个特定的地方时间点,如果他/她在夏令时

我也看过这个 VB 例子:

TimeZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time") 
Dim Dated As DateTime = TimeZoneInfo.ConvertTimeToUtc(TempDate, TimeZone) 

但恕我直言,这没有考虑到该时区的用户是否在夏令时(dst)国家。例如,这个时区的一个用户在荷兰有 dst,而另一个用户在另一个没有 dst 的国家。

4

3 回答 3

6

您不能询问有关特定国家/地区的框架- 但您可以询问特定时区

TimeZoneInfo 确实考虑了夏令时。(哎呀,否则它不会有这种IsDaylightSavingTime方法。)如果您有两个用户,其中一个当前正在观察 DST 而另一个没有,那么他们不在同一个时区。

如果您可以指定您正在谈论的位置,我可以尝试找出涉及哪些时区。(找出 Olson 的名字通常更容易,但找出 Windows ID 应该不是不可能的。)

于 2010-08-05T07:40:01.647 回答
2

TimeZone 类有一个 IsDaylightSavingTime 方法,该方法将日期作为参数并返回一个布尔值,指示该日期是否在该时区的夏令时中。

于 2010-08-05T07:42:20.817 回答
2

我将我的评论推广到答案。这似乎是一个复杂的问题。看看http://www.timeanddate.com/time/dst2010.html,有一张世界各国的夏令时表。您无法使用静态代码获得此信息,因为 DST 不仅因国家而异,而且每年都在变化。

我想您必须维护一个包含 DST 信息的表并从中获取信息。

或者您可以查询网络服务以获取此类信息。

查看http://www.earthtools.org/webservices.htm#timezone以获取 Web 服务,您可以查询该服务以获取考虑 DST 的各个国家/地区的时间(它仅适用于西欧时区)。另请查看http://www.geonames.org/export/web-services.html。您必须获取用户的地理位置才能使用这些服务。

于 2010-08-05T08:38:06.897 回答