以Db wrt记录客户端TimeZone的时间

时间:2010-12-19 20:32:46

标签: c# sql oracle datetime timezone

我有一个Web应用程序,它记录客户端执行的所有活动以及执行事件时的用户ID和时间。截至目前,应用程序记录数据库服务器的时间数据。我的应用程序支持不同的时区,所以我想捕获调用事件的客户机的时间,并将该时间存储在db而不是Db服务器时区。

表的结构 列:UserID,EventId,时间(此值必须是客户端计算机时间而不是数据库服务器值)

我的问题是如何记录客户端计算机时区而不是dbserver时区。

我希望我足够清楚。 提前致谢

2 个答案:

答案 0 :(得分:2)

在数据库端,您需要使用TIMESTAMP WITH TIMEZONE数据类型。

显然这会使一些查询更复杂。例如,如果你想提取星期六的记录,你是指发起插入的用户所看到的星期六,或者从查询人员或星期六看到的星期六,从数据库的角度看(或者其他'公正'的观点)。

答案 1 :(得分:1)

这里的问题是获取客户端浏览器的时区,但不幸的是,没有一种万无一失的方法可以做到这一点。但是有很多选择:

予。询问用户

作为“用户首选项”部分的一部分,您可以为用户提供设置其首选时区的选项。

II。猜猜

使用HTTP_ACCEPT_LANGUAGE标头,您可以推断出一个国家/地区。显然,如果设置只是“en”或“fr”或“es”,那么您的猜测就是这样,如果还有国家偏好,例如“en-US”或“en-GB”或“fr-FR”则您的猜测会更接近。您仍然需要“用户首选项”框来处理边缘情况。

III。使用Javascript

Javascript有一个getTimezoneOffset()函数,可以为客户端浏览器提供GMT的偏移量。以下显示了使用此功能的示例:

How can I obtain the local time in jQuery?

希望这有帮助。