Asp.net 如何将服务器时间转换为本地时间

Asp.net 如何将服务器时间转换为本地时间,asp.net,datetime,c#-3.0,Asp.net,Datetime,C# 3.0,我的时间有问题 我的服务器在美国,我在丹麦(欧罗巴),我想让我的网站显示我当地时间的时间。我该怎么做 我试试这个 Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime; 它是有效的,但它只在GMT+1/UTC+1时有效,而在GMT+2/UTC+2时无效。 还有其他方法吗?更简单的方法吗?你可以从服务器上抽出时间来做这件事 DateTime myTimeGMT = ServerTime.ToU

我的时间有问题
我的服务器在美国,我在丹麦(欧罗巴),我想让我的网站显示我当地时间的时间。我该怎么做

我试试这个

Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;
它是有效的,但它只在GMT+1/UTC+1时有效,而在GMT+2/UTC+2时无效。
还有其他方法吗?更简单的方法吗?

你可以从服务器上抽出时间来做这件事

DateTime myTimeGMT = ServerTime.ToUniversalTime();
这样做:

DateTime myTimeLocal = myTimeGMT.ToLocalTime();
这里唯一的限制是您所在的计算机必须设置为您要转换到的时区

根据我的经验,.NET在“从”时间和“到”时间都不是本地时区的情况下在时区之间转换时遇到问题


我希望这能有所帮助。

您应该做的唯一方法如下:

string zoneId = "Central European Standard Time";
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(zoneId);
DateTime result = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow,tzi);
Console.WriteLine("Time is " + result + " in Denmark");
在.Net中,使用TimeZoneInfo类是在不同时区之间进行转换并获得正确的DST转换的唯一可靠方法

TimeZoneInfo.ConvertTimeToUtc(dtLocal,tzi)
是从本地时间到utc时间的反向转换


对于时区Id字符串,您可以在此处运行代码位

foreach( var tz in TimeZoneInfo.GetSystemTimeZones() )
{
    Console.WriteLine(tz.DisplayName + " is Id=','" + tz.Id + "'");
}

我使用一个模板字段进行了在gridview中显示的转换

<asp:TemplateField HeaderText="Last Activity">
                <ItemTemplate>
                    <asp:Label ID="LastActivityLBL" runat="server" Text='<%# Convert.ToDateTime(Eval("LastActivityDate")).ToLocalTime() %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Last Login">
                <ItemTemplate>
                    <asp:Label ID="LastLoginLBL" runat="server" Text='<%# Convert.ToDateTime(Eval("LastLoginDate")).ToLocalTime() %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

你可以像这样改变你的时间跨度--


根据时区。

DateTime myTimeLocal=myTimeGMT.ToLocalTime();这将把它转换回ServerTime您需要查看TimeZoneInfo类来执行转换。您显示的转换忽略了DST问题。应该注意的是,TimeZoneInfo正确地考虑了未来和过去时间的DST差异。不要试图使用BaseUtcofset或GetUtcofset()自己进行转换。您还可以使用时区信息检查无效和不明确的时间。如果时区未知?对于不同国家的每个人来说,我们如何才能做到这一点?@JhoonBey允许人们选择自己的国家,或者使用一种根据IP地址确定国家的服务。例如
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(3,0,0)).DateTime;