C# 将某人转化为';s本地时间到UTC时间

C# 将某人转化为';s本地时间到UTC时间,c#,.net,datetime,dst,C#,.net,Datetime,Dst,我在时区有点迷路:) 我用UTC存储了时间数据。 服务器位于荷兰,因此我们生活在utc+1(现在,使用daylightsavingtime,utc+2) 现在一位客户说:给我8月5日的数据 因此,我必须根据“他的时间”计算utc时间。 为此,我必须知道: 您的utc偏移量是多少(我们将其存储在他的个人资料中,比如utc-6) 您是否在daylightsavingtime(因为我们必须添加+1并使utc偏移量为-5) 那么我的问题是: 我可以问一下.Net框架:XX国家是否有日光节约时间 我可以问

我在时区有点迷路:)

我用UTC存储了时间数据。 服务器位于荷兰,因此我们生活在utc+1(现在,使用daylightsavingtime,utc+2)

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

因此,我必须根据“他的时间”计算utc时间。 为此,我必须知道:

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

那么我的问题是:

  • 我可以问一下.Net框架:XX国家是否有日光节约时间

  • 我可以问一下.Net框架:08-05-2010T000:00:00在国家/地区XXX daylightsavingtime在那个时候吗

  • 我一直在尝试.ToLocalTime(),但这只提供了服务器上的本地时间,而这不是我想要的,我想计算用户的时区,以及在特定时间点,如果他/她在daylightsavingtime

    我还看到了这个VB示例:

    TimeZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time") 
    Dim Dated As DateTime = TimeZoneInfo.ConvertTimeToUtc(TempDate, TimeZone) 
    
    但我认为这并没有考虑到这个时区的用户是否在daylightsavingtime(dst)国家/地区。
    例如,此时区的一个用户在荷兰有dst,另一个用户在另一个没有dst的国家。

    您不能询问特定国家的框架,但可以询问特定时区

    TimeZoneInfo
    确实考虑了DST。(见鬼,它不会有其他的方法。)如果你有两个用户,其中一个正在观察DST,另一个没有,那么他们不在同一时区


    如果你能具体说明你在谈论的地点,我可以试着找出涉及哪些时区。(通常查找Olson名称比较容易,但查找Windows ID应该不是不可能的。)

    TimeZone类有一个方法IsDaylightSavingTime,该方法以日期为参数
    并返回一个布尔值,指示该日期是否在daylightsavingtime中为该时区节省时间。

    我将我的评论提升为答案。 这似乎是一个复杂的问题。看,世界各国都有DST表。静态代码无法实现这一点,因为DST不仅在不同的国家发生变化,而且每年都会发生变化

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

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

    查看一个Web服务,您可以查询该服务以获取考虑DST的各个国家的时间(它仅适用于西欧时区)。
    再看看。您必须让您的用户地理定位才能使用这些服务。

    相关问题-好的,谢谢。但你是说用户在进入DST时必须改变时区吗?例如,通常我在格林尼治标准时间+1阿姆斯特丹,但随后输入了DST,那么我在格林尼治标准时间+2吗?还是我在GMT+1在DST?如果是前一种情况,用户必须在我的应用程序中更改时区。(在这种情况下,它将按照您所说的那样工作,因为居住在DST国家的用户确实将其时区更改为+2,而居住在非DST国家的用户将其时区保持在+1)@Michel:不,时区描述了它进入和退出DST的时间。例如,我在奥尔森命名为“欧洲/伦敦”的时区,半年为UTC,半年为UTC+1。您在DST国家/地区的用户不会更改时区-他们的时区更改会偏离UTC。这是一个非常重要的区别。@Jon:好吧,我不知道时区知道DST何时开始结束。但是:然后还要知道你住在哪里,因为如果你的时区现在在DST,我可以检查时区,但是我还要知道你的国家(因为你的时区中有多个国家)是否与DST一起工作?@Jon:还有一个问题,当你将DST改为正常时间时,你有多个02.15次。所以,当你说:这件事发生在我的家里02.15,我必须问你:“是第一次02.15还是第二次02.15”,以确定正确的UTC时间。@Petar:美国有几个时区,而不仅仅是一个。是的,同一经度可以有不同的时区。谢谢,但这只适用于本地时间,在我的情况下,在asp.net服务器应用程序中,这将是服务器所在位置的时间。在这种情况下,我可以检查服务器是否在dst中,但不能检查特定时区的用户是否在dst中。我发现了以下内容:“timeZone.GetAdjustmentRules()[0]。DaylightTransitionStart”,它告诉我dst何时在特定区域启动,这是相同的吗?我在MSDN中查找。大致相同,但根据DST的信息,信息是动态的,随着国家法律的修改而不断变化,因此不能“嵌入”在静态框架中。不管怎样,我想法律上的修改并不经常发生,所以如果你不偶尔为计算中的错误而烦恼,你可以选择DaylightTransitionStart