ASP.NET/SQL Server-设置时区

ASP.NET/SQL Server-设置时区,asp.net,sql-server,timezone,Asp.net,Sql Server,Timezone,我们在美国有一个ASP.NET网站和一个SQL数据库。每当我在VB.NET中使用函数Now(),在SQL中使用函数getdate(),我都会得到美国的当前时间。问题是,客户在菲律宾,在GMT+8时区。我的问题是,有没有办法设置一个特定数据库和网站的时区,这样当我使用这些功能时,我就能得到菲律宾的当前时间?你是怎么处理的?尽可能地,我们不希望对函数的结果日期进行减法或加法,因为将来,客户将来自其他国家。如果我们这样做,更新代码会让我们头疼 提前谢谢你 鉴于您的客户可能位于不同的时区,您应该为客户存

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


提前谢谢你

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

这一问题已在以下问题中得到很大程度的解决:

后续行动:
不幸的是,SQL server日期是一个系统级设置,因此它实际上不是可以在每个会话的基础上进行操作的。听起来您需要进行一些代码更改,但您可以将它们隔离开来

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

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

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

  • 您必须进行代码更改,但您可能可以使用这些实用程序函数将输入和输出包装到任何地方,从而集中逻辑。Microsoft有一个关于使用DateTime类和操作时区时要避免的错误步骤的页面:

    谢谢您的回答。除了在显示之前操纵时间,还有其他方法吗?我们有另一个应用程序,现有的一个,它有相同的场景,我认为更新代码将是一件痛苦的事情。不幸的是,SQL server日期是一个系统级别的设置,所以它不是真正可以在每个会话的基础上操作的东西。我计划在SQL server中使用getutcdate()。