我正在将GTFS数据存储到SQL数据库中,有些时间值预计会超过24:00:00的限制。例如,一些列车在凌晨12:30运行,但是它们被列在前一天的服务中,并且该运行时间以24:30的方式存储在GTFS规范中。
如何解决这个问题?我应该只将其存储为字符串吗?
我正在将GTFS数据存储到SQL数据库中,有些时间值预计会超过24:00:00的限制。例如,一些列车在凌晨12:30运行,但是它们被列在前一天的服务中,并且该运行时间以24:30的方式存储在GTFS规范中。
如何解决这个问题?我应该只将其存储为字符串吗?
Sec + Min * 60 + Hour * 3600
对于24:30:00,您将得到88200。
当从数据库中加载值时,您可以通过简单的数学方程将其反转:
Hour = int(value / 3600)
Min = int(value % 3600 / 60)
Sec = value % 3600 % 1800
我会存储两个字段:
departure_time timestamp with time zone,
service_date date
=> select '2015-07-08'::timestamptz+'24:30'::interval;
2015-07-09 00:30:00+02
interval
,但它有点丑陋。在这种情况下,回退到整数秒可能是有意义的。 - Craig Ringer