我遇到了一个在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;
但我仍然得到同样的错误时间。任何帮助将不胜感激。
答案 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));