将某人的当地时间转换为UTC时间

我在时区有点迷失:)

我的数据存储时间为UTC。 服务器在荷兰,所以我们住在utc + 1(现在,在daylightavingtime,utc + 2)

现在客户说:从8月5日开始给我数据。

所以我必须从’他的时间’计算出来的时间。 为此,我必须知道:

什么是你的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) 

但是imho没有考虑到这个时区的用户是否处于daylightavingtime(dst)国家。 例如,这个时区的一个用户在荷兰有dst,而另一个用户在另一个没有dst的国家。

您无法询问有关特定国家/地区的框架 – 但您可以询问特定时区

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

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

TimeZone类有一个方法IsDaylightSavingTime,它以日期作为参数并返回一个布尔值,指示该日期是否为该时区的daylightavingtime。

我将评论推广到答案。 这似乎是一个复杂的问题。 请访问http://www.timeanddate.com/time/dst2010.html ,在世界各个国家/地区都有一张DST表。 你不能用静态代码来解决这个问题,因为DST不仅会改变国家/地区,也会逐年改变。

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

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

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