所以我在這裏使用gpx文件。注意一個選段:GPX和PostgreSQL的夏令時
<?xml version="1.0" encoding="UTF-8"?>
<!-- GPSTrack 2.2.1 — http://bafford.com/gpstrack -->
<gpx xmlns="http://www.topografix.com/GPX/1/1">
<trk>
<name><![CDATA[2016-03-31 10-17-54]]></name>
<trkseg>
<trkpt lat="38.704859" lon="-8.970304"><ele>13.050667</ele><time>2016-03-31T09:17:51Z</time><!-- hAcc=95.768176 vAcc=10.000000 --></trkpt>
<trkpt lat="38.704894" lon="-8.970324"><ele>13.050667</ele><time>2016-03-31T09:17:55Z</time><!-- hAcc=141.087476 vAcc=10.000000 --></trkpt>
<trkpt lat="38.704859" lon="-8.970304"><ele>13.050667</ele><time>2016-03-31T09:17:55Z</time><!-- hAcc=95.768176 vAcc=10.000000 --></trkpt>
<trkpt lat="38.704878" lon="-8.970343"><ele>13.150488</ele><time>2016-03-31T09:18:43Z</time><!-- hAcc=165.000000 vAcc=10.000000 --></trkpt>
請參閱文件名?它給了我們10H17的時間。現在檢查每個點的時間。計算時間少一小時。
我還是不明白這裏的時代如何混亂。但這是問題的開始。
現在,我正在解析這些許多gpx文件,並將它們加載到PostgreSQL數據庫中。更具體地說,本表:
CREATE TABLE IF NOT EXISTS trips (
trip_id SERIAL PRIMARY KEY,
start_location TEXT REFERENCES locations(label),
end_location TEXT REFERENCES locations(label),
start_date TIMESTAMP WITHOUT TIME ZONE NOT NULL,
end_date TIMESTAMP WITHOUT TIME ZONE NOT NULL,
bounds geography(POLYGONZ, 4326) NOT NULL,
points geography(LINESTRINGZ, 4326) NOT NULL,
timestamps TIMESTAMP WITHOUT TIME ZONE[] NULL
);
即使同時使用TIMESTAMP WITHOUT TIME ZONE
點被加載有錯誤的小時(小於一小時)。這隻發生在夏令時生效後的幾天內。這裏的觀點:有沒有辦法檢查日期是否在DST時間,並且如果檢查時加上一個小時?
我檢查了tm_isdst
和datetime.dst()
但我還是不明白。
不錯,雖然我對DST同意你浪費了我們的時間,它肯定是好的,在夏天哈哈還有一個小時的陽光。 所以,關於我的問題,我理解你的答案,並且我改變了我的表格,使'TIMESTAMP WITH TIME ZONE'。雖然日期是在同一個國家收集的,但是這個DST內容被視爲一個時區。 使用'pgAdmin'工具我現在看到我的表格顯示了這樣的日期: '2016-03-31 09:17:51 + 01'。這意味着當我查詢日期並將其傳遞給我想要的任何函數時,它會認爲它是10:17,對吧? –
@ Shoplifter.Doe:[正如鏈接的答案中所解釋的](*解釋*)(* http://stackoverflow.com/questions/9571392/ignoring-timezones-altogether-in-rails-and-postgresql/9576170#9576170),*顯示* 'timestamptz'適用於會話的時區設置。您可以再一次使用AT TIME ZONE構造獲得給定時區的顯示。當*將*轉換爲'日期'時,也會考慮當前的時區設置。 –
是的,我知道了。會話的時區設置綽綽有餘。 「夏令時並不是人類有史以來最明智的想法之一。」 - 編程問題確實如此。 對於我來說,'SELECT start_date :: timestamp AT TIME ZONE'UTC'from trips'表達式是適用於我的那個。就像你的鏈接答案中的「加載的弩槍」一樣。 在我的前端,我可以用一些JS庫輕鬆處理這些日期。 我很不知道這些時區可能是一個痛苦。感謝您的教訓。 –