【发布时间】:2016-12-05 22:30:43
【问题描述】:
所以我在这里使用 gpx 文件。记下其中一段的摘录:
<?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(),但还是不明白。
【问题讨论】:
标签: python xml postgresql time dst