C# - 无法设置正确的时区

时间:2015-04-20 17:29:05

标签: c# asp.net .net time

我遇到了一个在GoDaddy的共享主机方案上托管的ASP.net网站的问题。尽管将文化和UI文化设定为英国,但时间似乎与格林尼治标准时间相差8小时。

见这个例子:

Date.Now.ToString(New CultureInfo("en-GB")) & " - Culture: " + CultureInfo.CurrentCulture.Name + " - UI Culture: " + CultureInfo.CurrentUICulture.Name;

输出:

  

20/04/2015 10:16:17 - 文化:en-GB - UI文化:en

英国称该声明的时间是18:16:17。

我也尝试过没有文化:

  Date.Now.ToString("dd/MM/yyyy");

并改为使用UtcNow:

Date.UtcNow.ToString(New CultureInfo("en-GB")) + " - Culture: " & CultureInfo.CurrentCulture.Name + " - UI Culture: " + CultureInfo.CurrentUICulture.Name;

但我仍然得到同样的错误时间。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

ASP.net中的时区是您使用的最近的网络服务器的时区,可能位于下一个时区。一种方法是使用JavaScript小时,它给出最终用户的本地时间,并从UTC小时中减去它以获得当地时区。

<script type="text/javascript">
    window.onload = function () {
        var localTime = new Date();
        var hours = localTime.getHours();
        document.getElementById("<%=Hidden1.ClientID%>").value = hours;
    }
</script>

Default.aspx.cs

UTChour = DateTime.UtcNow.ToString("HH")
localHour = Hidden1.Value
timezone = UTChour - localHour

答案 1 :(得分:1)

正如@artisdextrus所说,DateTime结构始终表示服务器本地时间或UTC时间的时间。如果您知道最终用户的时区,则可以使用DateTimeOffset类表示最终用户的本地时间:

var myUsersTimeZone = "Central Standard Time";
var myServersTimeAsUtc = DateTime.UtcNow;
var myUsersTime = TimeZoneInfo.ConvertTimeFromUtc(
            myServersTimeAsUtc,
            TimeZoneInfo.FindSystemTimeZoneById(myUsersTimeZone));