我们在美国有一个ASP.NET网站和一个SQL数据库。每当我在VB.NET中使用函数Now()
和在SQL中使用getdate()
时,我都会获得美国当前时间。问题是,客户位于菲律宾的GMT + 8时区。我的问题是,有什么方法可以设置特定数据库和网站的时区,这样当我使用这些功能时,我会得到菲律宾当前的时间吗?你怎么处理这个?尽可能地,我们不希望对函数的结果日期进行减法或添加,因为将来客户将来自其他国家/地区。如果我们这样做,它会让我们头痛更新代码。
提前谢谢!
答案 0 :(得分:3)
鉴于您的客户可能位于不同的时区,您应该为客户存储时区,他们(或您)可以将其设置为其帐户的首选项。将所有日期+时间存储为UTC,然后在界面中显示结果时转换为其时区。
以下问题已在很大程度上解决了这个问题: How to work with time zones in ASP.NET?
随访: 不幸的是,SQL服务器日期是一个系统级别的设置,所以它并不是真正可以在每个会话基础上操作的东西。听起来你需要做一些代码更改,但你可以隔离它们。
您是否有包含客户端时区偏移量的会话级变量?如果没有,请创建一个。
创建一个小型日期/时间实用程序类。
在实用程序类中,提供3种方法: (1)获取当前日期/时间(偏移到客户的时区) (2)传递数据库日期/时间以返回客户端TZ的时间偏移量。 (3)从客户端传递一段时间以减去客户的TZ差异。
您必须更改代码,但您可以使用这些实用程序函数将输入和输出包装到任何地方,集中逻辑。 Microsoft有一个页面,说明在使用DateTime类和操作时区时要避免的错误步骤: http://msdn.microsoft.com/en-us/library/ms973825.aspx#datetime_topic1a