有没有办法在ASP.NET中定义应用程序的时区,以便所有读取/比较当前服务器时间的时间都被隐式转换,或者是否需要将转换语句放入每个DateTime.Now调用?有没有办法在ASP.NET中定义应用程序的时区?
回答
我不知道有关ASP的最新演变,但这article from 2006提供了一个有趣的答案:
的问题是,时区信息不直接可通过Web浏览器。您可以使用启发式方法确定正确的时区,或者您必须根据用户的选择为用户存储时区设置。
接下来可能无法与.net 3.5及其TimeZoneInfo..ConvertTime方法需要,不过,出于完整性的缘故:
一旦你有,你现在需要的时间翻译时区设置。 您应该始终使用UTC将日期/时间值存储在数据库中。这消除了许多转换问题。如果以UTC格式存储信息,那么只需将UTC显示到用户的本地时区,然后将数据显示给它们时,如果从中获取日期/时间值,则需要将时区转换为UTC。
是什么使这更困难的是,TimeZone类是不是所有的有用。幸运的是,在v2.0中,DateTime更新为支持时间是否为UTC的指标。 您可以使用DateTime.ToUniversalTime方法将DateTime转换为UTC。不幸的是,您不能将其转换回。
的ToLocalTime方法使用,在服务器上运行,使用服务器的时区,这是不是你想要的本地时区。但更糟糕的是,您不能简单地创建TimeZone对象并使用它,因为该支持不存在。
迈克尔·布拉姆为了能够轻松地创建和使用时区创造了一个很好的little class。我个人在我自己的应用程序中使用了该代码的重大修改版本,并且效果很好。以下是将DB UTC值转换为本地用户时区的步骤。
1)获取用户
2)创建的SimpleTimeZone类来包装它(使用一个DB值映射到底层的Windows注册表版本的一些映射方案)
3的存储区值)使用SimpleTimeZone.ToLocalTime方法将DateTime值转换为本地时间。
出于性能方面的考虑,您或许应该得到和初始化的SimpleTimeZone实例,并将它缓存在项目属性为请求的长度,这样你就不必不断创建它。
从用户的本地时区转换为UTC做相反:
1)从用户
2获取存储区值)创建的SimpleTimeZone类来包装它
3)使用的SimpleTimeZone .ToUniversalTime方法将DateTime转换为UTC。
内部使用DateTime.UtcNow。对于.NET 3.5,请查看 TimeZoneInfo.ConvertTime。
请允许我回答这个问题直接。
有没有一种方法来定义时区在ASP.NET应用程序使得从读/相比,目前的服务器时间隐式转换始终...
不,这不是可能。 .NET中没有任何机制可以在每个线程或每个应用程序的基础上更改本地时区。它只能通过运行代码的机器的时区设置在系统范围内进行更改。 See this answer also。
...或者我是否需要在每个DateTime.Now调用中输入转换语句?
您不应该在网络应用程序中使用DateTime.Now
。由于服务器的时区设置可以很容易地更改,因此您应该设计应用程序以忽略它。这意味着在读取当前系统时间时使用DateTime.UtcNow
。或者,您可以使用DateTimeOffset
及其DateTimeOffset.Now
或DateTimeOffset.UtcNow
属性。
参见:The Case Against DateTime.Now
当你需要与特定用户的本地时间来工作,然后是 - 你必须投入转化为每个使用。您可以使用TimeZoneInfo
类完成此操作。
您也可以考虑使用Noda Time,它提供了IANA time zone database的实现,并且通常是一个更好的API。
- 1. 有没有办法在我的asp.net应用程序的类中使用Server.MapPath
- 2. 有没有办法在我的应用程序中使用mstest
- 3. 有没有办法自定义iPhone上现有的联系人应用程序?
- 4. 有没有办法在写angularjs时更新应用程序?
- 5. Swift - 有没有办法在特定时间唤醒我的应用程序?
- 6. 有没有办法在Blue Prism中“激活”html应用程序?
- 7. 有没有办法在javaFX应用程序中集成html IFrame
- 8. 有没有办法在应用程序中查找对象?
- 9. 有没有办法在android中创建自定义应答机?
- 10. 有没有办法在我的应用程序中锁定屏幕?
- 11. 有没有办法知道在iOS中删除应用程序的时间?
- 12. 有没有办法限制UIDocumentInteractionController中显示的应用程序?
- 13. 有没有办法在WCF中进行自定义序列化?
- 14. 有没有办法确保ASP.NET应用程序(仅)在HTTPS协议上运行?
- 15. 有没有办法在android上运行windows mobile应用程序?
- 16. 有没有办法在gem内创建rails应用程序?
- 17. 有没有办法在Raspberry Pi上运行Angular应用程序?
- 18. 有没有办法在Elastic Beanstalk上部署coffeescript应用程序?
- 19. 有没有办法在设备上开发android应用程序?
- 20. 有没有办法确定在Vim中是否已经定义了高亮区?
- 21. 有没有办法让我的Android应用程序在安装时运行一些自定义代码?
- 22. 有没有办法让python应用程序无法运行?
- 23. 有没有办法远程查看Swing应用程序?
- 24. 有没有办法在.NET Framework 2中使用C#应用程序中的linq?
- 25. 有没有办法自定义JLabel?
- 26. 有没有办法自定义Sharekit?
- 27. 有没有办法在多线程应用程序中安全地使用errno?
- 28. 有没有办法定义模型中的哪些字段在管理应用程序中可编辑?
- 29. 有没有办法确定Azure表中的现有分区?
- 30. (iOS)有没有办法缩短我的应用程序提交?
感谢您的意见 - 我不希望显示为“用户时间”,只是从服务器的不同时间(静态)。无论如何,这仍然回答我的问题 – 2008-11-19 06:50:30