关于ASP.NET / SQL Server:ASP.NET / SQL Server – 设置时区

ASP.NET / SQL Server - Set Time Zone

我们有一个ASP.NET网站和一个在美国托管的SQL数据库。 每当我在VB.NET中使用函数Now()和在SQL中使用getdate()时,我都会得到美国当前时间。 问题是,客户位于菲律宾的GMT + 8时区。 我的问题是,有什么方法可以设置特定数据库和网站的时区,这样当我使用这些功能时,我会得到菲律宾当前的时间吗? 你怎么处理这个? 尽可能地,我们不希望对函数的结果日期进行减法或添加,因为将来客户将来自其他国家/地区。 如果我们这样做,它会让我们头痛更新代码。

先感谢您!


鉴于您的客户可能位于不同的时区,您应该为客户存储时区,他们(或您)可以将其设置为其帐户的首选项。将所有日期+时间存储为UTC,然后在界面中显示结果时转换为其时区。

这个问题已在很大程度上解决了以下问题:
如何在ASP.NET中使用时区?

跟进:
不幸的是,SQL服务器日期是一个系统级别的设置,所以它并不是真正可以在每个会话基础上操作的东西。听起来你需要做一些代码更改,但你可以隔离它们。

  • 您是否有包含客户端时区偏移量的会话级变量?如果没有,请创建一个。

  • 创建一个小的日期/时间实用程序类。

  • 在实用程序类中,提供3种方法:
    (1)获取当前日期/时间(偏移到客户的时区)
    (2)传递数据库日期/时间以返回客户端TZ的时间偏移量。
    (3)从客户端传递一段时间以减去客户的TZ差异。

  • 您将不得不进行代码更改,但您可以使用这些实用程序函数将输入和输出包装到任何地方,集中逻辑。 Microsoft有一个页面,说明在使用DateTime类和操作时区时要避免的错误步骤:
    http://msdn.microsoft.com/en-us/library/ms973825.aspx#datetime_topic1a