处理服务器和客户端的时区偏移量

时间:2011-04-25 14:05:32

标签: web-applications timezone

我正在开发一个应用程序(使用spring框架),每当添加新记录时,当前时间都存储在db中。

因此,当在前端向用户显示这些记录时,显示的时间是服务器的时区而不是客户端。由于应用程序面向全球受众,如果用户看到他们刚刚添加了不同时间的记录,则可能会让用户感到困惑。

我猜测所有用户都位于全球的应用都必须面对这个问题。

处理这个问题的最佳方法是什么?

在进行一些搜索并在SO上阅读几个答案后,我正在考虑的两个选项是 -

1)使用javascript或ip地址获取用户的时区,并将其存储在db而不是服务器时间。

2)显示用户,相对于最近添加的记录的当前时间的时间(例如added 2 mins agoadded 1 day ago以及之前的记录显示实际日期。

不考虑第一个因为我觉得它会导致表中主键和created at列之间的不一致。目前可能没有害处,因为用户只能看到自己的记录,但如果将来要向他们展示其他记录,将会导致混淆。

第二种方法对我来说很好看。事实上,我可以在SO上看到类似的东西(例如,在最新的问题中显示相对时间和几天后添加的特色问题显示'实际'日期和时间),但不确定是否在此处解决相同的问题。

想知道任何其他方法。

2 个答案:

答案 0 :(得分:0)

在我们的应用程序中,我们显示当前的服务器时间,因此每当用户看到将来在其时区中看似记录3小时的事件时,就会提醒客户端/服务器时间差异。

请记住,这主要是管理用户界面,所以一个典型的用户宁愿在查看记录的事件时进行心理数学运算,然后在安排下一个进程运行时:是我的早上6点还是早上6点?当业务用户需要数据时,它会在早上8点完成吗?

答案 1 :(得分:0)

只要你能逃脱它就做#2。只要您有与每个数据相关联的时间戳,就可以使用此选项。如果您需要显示实际日期(例如在日历上),那么您必须执行#1(或类似的事情)。

Javascript使用计算机时间,因此只要您知道服务器时区,就可以使用Javascript将服务器时间转换为本地时间。如果出于某种原因需要将数据存储在用户时区的数据库中,请始终将时区与时间一起存储;否则它毫无意义。在这种情况下,或许更好的选择是将时间存储在服务器时间并将用户的时区存储在其他地方,然后在需要时(尽可能晚)转换时间。