2014-10-29 41 views
0

這是關於處理時區的相當普遍的問題。導入沒有時區信息和DST的時間數據

我的情況如下:我正在導入歷史日誌文件條目到數據庫中。這些條目具有經典的Unix紀元格式的時間戳,並且不包含時區偏移信息。我知道他們錄製的時區。時區觀察夏令時。如何處理將這些數據導入時區感知數據庫?大多數條目都很簡單,但有一個問題時間 - 當DST結束時(時間轉移一個小時,使最後一個小時「重新運行」)。有完全有效的相同時間戳,表示不同次。是否有任何約定的方法如何處理此任務?

我糾正,在某些數據輸入這個問題是不可解決的?

回答

0

我不相信這個問題是不可解決的。這些年你需要知道幾件事情 - #1,當DST/ST發生時(所以有些時候庫會有用),#2能夠按順序解析這些日誌。導入時,您使用庫解析日期時間以確定它是DST還是ST。對於在DST轉換周圍發生的小時,您可以按順序播放它,並且當一個條目在前一個條目前1小時跳轉時,您知道需要對其進行調整。假設您的數據是按順序排列的,您可以進行分析。並不是說這很容易,但肯定可行。唯一不可能確定的是在轉換時間內是否只有單個日誌條目。你無法知道它是在DST之前還是之後。希望儘管你的日誌足夠嘈雜,以至於在此之前和之後的時間裏都有樣本。

既然你沒有寫任何有關語言或任何其他細節的東西,我不能給你任何具體的實現。

+0

這是一般性問題,不需要考慮任何語言細節。問題的癥結在於有時間戳值的範圍,每個值表示實際時間爲兩個,您根本不知道哪個是哪個。你可能試圖做一些啓發式的方法,但它們不可能是萬無一失的。只要考慮到這個過渡期只有一個條目 - 你無法知道它是DST還是非DST時間戳。 – mdw 2014-10-29 20:15:49

+0

這是正確的。如果您在那段時間內目睹復發,您只能確定。如果在此期間只記錄了一個事件,則無法確定是在DST之前還是之後。但是你必須問自己,你的項目的要求是否決定了它的重要性?我們只是每週一次的清晨凌晨2點和3點談論一次?你可以允許這個誤差幅度嗎?我猜測你有足夠的空間來處理這個誤差,否則日誌會更加謹慎。 – PressingOnAlways 2014-10-29 23:14:44