Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在ASP.NET中定义应用程序的时区?_Asp.net_Time_Timezone - Fatal编程技术网

有没有办法在ASP.NET中定义应用程序的时区?

有没有办法在ASP.NET中定义应用程序的时区?,asp.net,time,timezone,Asp.net,Time,Timezone,是否有方法在ASP.NET中定义应用程序的时区,以便从当前服务器时间读取/与当前服务器时间比较的所有时间都被隐式转换,或者是否需要将转换语句作为每个日期时间。现在调用?内部使用。对于.NET3.5,请查看 .我不确定ASP的最新发展,但这提供了一个有趣的答案: 问题在于,时区信息无法通过web浏览器直接获取。您可以使用试探法来确定正确的时区,或者必须根据用户的选择存储时区设置 .Net 3.5及其方法可能不需要以下内容,但出于完整性考虑: 一旦你有了时区设置,你现在需要翻译时间您应该始终以UTC

是否有方法在ASP.NET中定义应用程序的时区,以便从当前服务器时间读取/与当前服务器时间比较的所有时间都被隐式转换,或者是否需要将转换语句作为每个日期时间。现在调用?

内部使用。对于.NET3.5,请查看
.

我不确定ASP的最新发展,但这提供了一个有趣的答案:

问题在于,时区信息无法通过web浏览器直接获取。您可以使用试探法来确定正确的时区,或者必须根据用户的选择存储时区设置

.Net 3.5及其方法可能不需要以下内容,但出于完整性考虑:

一旦你有了时区设置,你现在需要翻译时间您应该始终以UTC格式将日期/时间值存储在数据库中。这消除了许多转换问题。如果将信息存储在UTC中,则当向用户显示数据时,只需将UTC转换为用户的本地时区,当从用户获取日期/时间值时,需要将其时区转换为UTC

更困难的是,TimeZone类并不是那么有用。幸运的是,在v2.0中,更新了DateTime以支持时间是否以UTC为单位的指示器可以使用DateTime.ToUniversalTime方法将日期时间转换为UTC。不幸的是,您无法将其转换回

该方法使用本地时区,当在服务器上运行时,该时区使用的是服务器的时区,而不是您想要的时区。然而,更糟糕的是,您不能简单地创建一个时区对象并使用它,因为这种支持并不存在

Michael Brumm创建了一个能够轻松创建和使用时区的nice。我个人在我自己的应用程序中使用了一个经过大量修改的代码版本,效果很好。以下是将DB UTC值转换为本地用户时区的步骤

1) 获取用户存储的时区值
2) 创建一个SimpleTimeZone类来包装它(使用一些将DB值映射到基础Windows注册表版本的映射方案)
3) 使用SimpleTimeZone.ToLocalTime方法将日期时间值转换为本地时间

出于性能原因,您可能应该获取并初始化SimpleTimeZone实例,并将其缓存在请求长度的Items属性中,这样您就不必继续创建它

要将用户的本地时区转换为UTC,请执行相反的操作:

1) 从用户处获取存储的时区值
2) 创建一个SimpleTimeZone类来包装它

3) 使用SimpleTimeZone.ToUniversalTime方法将日期时间转换为UTC。

请允许我直接回答此问题

是否有方法在ASP.NET中定义应用程序的时区,以便隐式转换从当前服务器读取/与当前服务器时间比较的所有时间

不,这是不可能的。NET中没有任何机制可以在每个线程或每个应用程序的基础上更改本地时区。只能通过运行代码的机器的时区设置在系统范围内对其进行更改

。。。或者我需要把转换语句作为每个DateTime。现在调用

您不应该在web应用程序中使用
DateTime.Now
。由于服务器的时区设置很容易更改,因此应将应用程序设计为忽略它。这意味着在读取当前系统时间时使用
DateTime.UtcNow
。或者,您可以使用
DateTimeOffset
及其
DateTimeOffset.Now
DateTimeOffset.UtcNow
属性

另见:

当您需要使用特定用户的本地时间时,那么是的-您必须为每次使用输入转换。您可以使用
TimeZoneInfo
类来完成此操作


您也可以考虑使用,它提供了一个实现,并且是一个更好的API。

谢谢。我不希望显示为“用户时间”,只是从服务器(静态地)不同的时间。不管怎样,这仍然回答了我的问题。