ASP.NET / SQL Server - 设置时区

时间:2011-10-27 03:03:37

标签: asp.net sql-server timezone

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

提前谢谢!

1 个答案:

答案 0 :(得分:3)

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

以下问题已在很大程度上解决了这个问题: How to work with time zones in ASP.NET?

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

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

  2. 创建一个小型日期/时间实用程序类。

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

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