【问题标题】:ASP.NET / SQL Server - Set Time ZoneASP.NET / SQL Server - 设置时区
【发布时间】:2011-12-16 05:06:57
【问题描述】:

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

提前谢谢你!

【问题讨论】:

    标签: asp.net sql-server timezone


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 感谢您的回答。除了在显示前操纵时间,还有其他方法吗?我们有另一个应用程序,现有的应用程序,具有相同的场景,我认为更新代码会很痛苦。
    • 不幸的是,SQL Server 日期是系统级别的设置,因此它并不是真正可以在每个会话的基础上进行操作的东西。我打算在 SQL Server 中使用 getutcdate()。
    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多