我有点迷失在时区:)

我存储了 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) 国家/地区。例如,该时区的一个用户位于有夏令时的荷兰,而另一位用户位于没有夏令时的另一个国家。

有帮助吗?

解决方案

您不能向框架询问特定的信息 国家 - 但你可以询问某个特定的问题 时区.

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

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

其他提示

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

我将我的评论提升为答案。这似乎是一个复杂的问题。看着 http://www.timeanddate.com/time/dst2010.html, ,有一个世界各个国家的DST表。您无法使用静态代码获得此信息,因为 DST 不仅会因国家/地区而异,而且还会逐年变化。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top