有没有一种方法可以为 ASP.NET 中的应用程序定义时区,以便隐式转换从当前服务器时间读取/与当前服务器时间比较的所有时间,或者我是否需要在每次 DateTime.Now 调用时放入转换语句?
我不确定 ASP 的最新发展,但是这个2006年的文章 http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/772971a4-9f1b-4004-a873-c1e0e2098852/提供了一个有趣的答案:
问题是时区信息无法通过网络浏览器直接获得。您可以使用启发式方法来确定正确的时区,或者您必须根据用户的选择来存储用户的时区设置。
.Net 3.5 及其版本可能不需要以下内容时区信息..转换时间 http://msdn.microsoft.com/en-us/library/system.timezoneinfo.converttime.aspx方法,但为了完整性起见:
完成时区设置后,您现在需要转换时间。您应该始终以 UTC 格式将日期/时间值存储在数据库中。这消除了许多转换问题。如果您将信息存储在 UTC 中,那么当您向用户显示数据时,您只需要从 UTC 转换为用户的本地时区,并且当您从用户那里获取日期/时间值时,您需要从他们的时区转换为 UTC。
让这变得更加困难的是 TimeZone 类并不是那么有用。幸运的是,在 v2.0 中,DateTime 已更新为支持指示时间是否为 UTC 的指示器。您可以使用 DateTime.ToUniversalTime 方法将 DateTime 转换为 UTC。不幸的是,你无法将其转换回来.
The 至当地时间 http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx方法使用本地时区,当在服务器上运行时,使用服务器的时区,这不是您想要的。然而更糟糕的是,您不能简单地创建 TimeZone 对象并使用它,因为不存在该支持。
迈克尔·布鲁姆 (Michael Brumm) 创造了一个不错的小班 http://www.michaelbrumm.com/simpletimezone.html能够轻松创建和使用时区。我个人在我自己的应用程序中使用了该代码的经过大量修改的版本,并且效果很好。以下是将数据库 UTC 值转换为本地用户时区的步骤。
1)获取用户存储的时区值
2) 创建一个 SimpleTimeZone 类来包装它(使用某种映射方案将 DB 值映射到底层 Windows 注册表版本)
3) 使用SimpleTimeZone.ToLocalTime方法将DateTime值转换为本地时间。
出于性能原因,您可能应该获取并初始化 SimpleTimeZone 实例,并将其缓存在 Items 属性中以达到请求的长度,这样您就不必继续创建它。
要从用户的本地时区转换为 UTC,请执行相反的操作:
1)从用户处获取存储的时区值
2)创建一个SimpleTimeZone类来包装它
3) 使用 SimpleTimeZone.ToUniversalTime 方法将 DateTime 转换为 UTC。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)