2011-04-25 64 views
1

我正在使用一個應用程序(使用spring框架),其中當添加新記錄時,將當前時間存儲在數據庫中。處理服務器和客戶端的時區偏移

所以,當這些記錄顯示,在前臺用戶,顯示的時間是按照服務器的時區,而不是客戶的。由於該應用程序面向全球用戶,因此如果用戶看到他們剛添加的記錄時間不同,則可能會讓用戶感到困惑。

我在猜測這個問題必須由所有用戶位於全球的應用程序所面對。

什麼是解決此問題的最佳方法?

我做了一些搜索和SO閱讀幾個答案後,考慮兩個選項 -

1)獲得使用JavaScript或從IP地址的用戶的時區,並在數據庫中存儲的服務器時間,而不是。

2)顯示的用戶,相對於時間當前時間最近添加記錄(如:added 2 mins ago高達added 1 day ago及更早的記錄顯示的實際日期。

不考慮,因爲我覺得它會導致第一個表中的主鍵和created at列之間的不一致性當前可能不會有害,因爲用戶只能看到他們自己的記錄,但是如果將來要向他們顯示其他記錄,將導致混淆。第二種方法對我來說很好,事實上,我可以看到類似的東西(例如,在最新的問題中,相對時間是s並且幾天前添加的特色問題顯示「實際」日期和時間),但不確定是否在這裏解決同一問題。

想知道其他方法。

+0

以您接受的方式回答您的問題? – Olaf 2011-07-11 17:12:02

回答

0

只要你能擺脫它,做2號。只要您有與每個數據片段相關的時間戳,就可以使用它。如果您需要顯示實際的日期(例如在日曆上),那麼您必須執行#1(或類似的事情)。

JavaScript使用電腦的時間,讓你隨時可以轉換服務器次使用Javascript,只要你知道服務器時區本地時間。如果出於任何原因需要將數據存儲在用戶時區的數據庫中,請始終將時區與時間一起存儲;否則它沒有意義。也許在這種情況下更好的選擇是將時間存儲在服務器時間中,並將用戶的時區存儲在其他地方,然後在需要時轉換時間(儘可能晚)。

+1

哦,如果你需要準確的時間,不要忘記夏令時! – 2011-09-07 16:09:44

0

在我們的應用中,我們顯示當前服務器時間,所以每當用戶看到的事件貌似在他/她的時區記錄的3小時以後,有一個關於客戶端/服務器的時間差提醒。

請記住,這主要是管理用戶界面,讓普通用戶寧願做心算看記錄的事件時,則下一個調度進程運行時:這是我早上6時或早上6點他們?當業務用戶需要這些數據時,那邊的上午8點會完成嗎?

相關問題