2009-10-26 53 views
2

好吧,這可能是一個簡單的問題,但我還沒有拿出一個工作的解決方案,所以任何人誰可以幫助在此先感謝。如何爲Web應用程序保留準確的時間(夏令時)?

考慮以下情形:我們有一個Web應用程序在MySQL上運行(如果你需要知道)是隨時間變化的說,在用戶指定的時間發送電子郵件的應用程序。現在,每個用戶都設置了適當的時區/城市,並且服務器使用UTC來簡化操作。準確的時間將是服務器時間+時區+夏令時。用戶希望電子郵件在2010年1月4日下午5:00到達他。 我的問題是如何獲得正確的夏令時?這個用戶在一個觀察DST的地區是否意味着他/她是否觀察到了這個用戶?

我第一個衝動是要找到,鑑於當前時區/城市會給你正確的夏令web服務。到目前爲止,我還沒有找到一個。我對第二個想法感到灰心,那就是我必須爲DST制定規則,因爲這些規則每年都會改變,在一些國家會有一兩天以上的變化。

任何幫助非常感謝。

+0

你使用什麼編程語言?許多已建立的語言環境功能... – Artelius 2009-10-26 22:24:18

+0

我的錢是在PHP! – 2009-10-26 22:24:56

+0

其實我使用的Common Lisp(SBCL是準確的),但我很抱歉,我似乎無法看到爲什麼語言就能告訴我夏令時。僅舉一個例子,埃及在齋月開始(基於農曆的一個月)方面有法律規定夏令時,這使得以前很難預測,因此語言如何是內在的。 – Mackram 2009-10-26 22:28:20

回答

1

如果你的編程語言,沒有花哨的時區支持的邏輯,你沒有自己的規則進行編程。您只需編寫對zoneinfo數據庫的支持。

+0

不同。感謝Jason指導區域信息數據庫的幫助。我曾希望,因爲我想能夠查詢一些服務器,但解決方案是足夠好的,因爲我找不到第一個。 – Mackram 2009-10-28 09:26:02

+0

對於像我這樣對Common Lisp感興趣的人,我只想指出,我瞭解了提供對zoneinfo支持的本地時間庫(目前在SBCL上測試過)。 – Mackram 2009-10-28 18:27:49

0

Store中爲1月以來1秒日,1970 GMT在你的數據庫,你將永遠有處理時間。當用戶輸入他的時間時,使用正確的時區設置適當地轉換它,然後就完成了。

您的服務器不同時區已經運行所以到時候它是一個簡單的選擇。

這裏的some code做時區轉換在LISP:

+0

除了他問如何獲得正確的時區設置... – 2009-10-26 22:32:12

+0

是的,MySQL位讓我失望 - 很多人傾向於把他們的日期作爲DateTime而不是int(11),並傾向於給他們大量的DST問題。 – 2009-10-26 22:36:23

+0

我明白你的建議,但正如Jason所指出的那樣,對於我來說,格林尼治標準時間的移動時間,我需要知道用戶的未來時間是否會受到夏令時的影響,這基本上是原始問題,但問題不同。此外請注意,decode-universal-time函數取決於您的服務器時鐘和DST設置,這對於我們的問題目的而言與用戶的 – Mackram 2009-10-26 22:38:25