我有时间问题 我的服务器在美国,我在丹麦(Europa),我想让我的网站显示当地时间。我怎么能这样做?
我试试这个
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;
并且它可以工作,但只有当我在GMT + 1 / UTC + 1时才会工作,而在我在GMT + 2 / UTC + 2时则不行。 有没有另一种方法 - 这是一种更简单的方法吗?
答案 0 :(得分:11)
你应该这样做的唯一方法如下:
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");
使用TimeZoneInfo类是.Net中唯一可靠的方式来转换到不同的时区或从中获取正确的DST转换。
TimeZoneInfo.ConvertTimeToUtc(dtLocal,tzi)
是从本地时间到utc时间的反向转换。
对于TimeZone Id字符串,您可以在此处运行一些代码......
foreach( var tz in TimeZoneInfo.GetSystemTimeZones() )
{
Console.WriteLine(tz.DisplayName + " is Id=','" + tz.Id + "'");
}
答案 1 :(得分:0)
您可以从服务器上获取时间并执行此操作。
DateTime myTimeGMT = ServerTime.ToUniversalTime();
这样做:
DateTime myTimeLocal = myTimeGMT.ToLocalTime();
此处唯一的限制是您所在的计算机必须设置为您要转换的时区。
根据我的经验,当'From'时间或'To'时间都不是本地时区时,.NET无法在时区之间进行转换。
我希望这会有所帮助。
答案 2 :(得分:0)
我使用模板字段将转换显示在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>
答案 3 :(得分:0)
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;
您可以更改您的TimeSpan -
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(3,0,0)).DateTime;
根据时区。