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

C# - Unable to set correct timezone

我在使用 GoDaddy 共享主机计划托管的 ASP.net 网站时遇到问题。尽管文化和 UI 文化设置为英国,但时间似乎与 GMT 相差 8 小时。

看这个例子:

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

这输出:

20/04/2015 10:16:17 - Culture: en-GB - UI Culture: 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;

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

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

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

表示您的最终用户本地时间
var myUsersTimeZone = "Central Standard Time";
var myServersTimeAsUtc = DateTime.UtcNow;
var myUsersTime = TimeZoneInfo.ConvertTimeFromUtc(
            myServersTimeAsUtc,
            TimeZoneInfo.FindSystemTimeZoneById(myUsersTimeZone));