我正在使用一个非常大的数据,其中精度非常重要,我正在观察人类在一天中不同时间的行为。我使用以下代码从纪元日期提取日期(使用rsqlite-基本上只允许在R内使用)查询的构建方式相同):
dbGetQuery(db,"SELECT datetime(started_at, 'unixepoch', 'utc','-4 hours') FROM biketransactions limit 3")
我使用的数据是在纽约记录的,但有一个问题是,纽约并不总是比UTC时区晚4小时。如果没有夏令时,它的时差为-5小时。使用此方法,我将获得“夏季”期间的正确小时戳,但“冬季时间”中的数据将始终假定为一小时后的数据。这将极大地影响我的最终结果。有哪些方法可以在考虑夏令时的情况下转换纪元时间?
1条答案
按热度按时间vecaoik11#
这里有三种方法,
首个解决方案
一种方法是创建一个表(演示中的DST),其中包含夏令时的开始和结束日期和时间。
然后,如果Start_at在相应年份的两个日期之前,则可以根据-1(真)或-0(假)调整-5小时偏移量。
例如
datetime(started_at,'unixepoch','-'||(5 - (started_at BETWEEN dst_start AND dst_end))||' hours')
这是一个演示:-
结果包括(DST DATETIME突出显示):
第二种解决方案
另一种方法是根据夏令时开始于3月的第二个星期日和结束于11月的第一个星期日的规则来确定当前夏令时的开始和结束。然而,如图所示,这仅限于本年度的日期:
这是一个演示:-
结果是:
第三(也许是最好的解决方案)
第一个解决方案需要维护一个额外的表格,第二个解决方案不能很好地满足除本年度以外的其他日期。第三种选择进一步使用开始日期的年份作为调整的基础。因此,这可能是更可取的解决方案:
这使用相同的方法将数据加载到biketransaction(简写为bt)表中,结果是:
其后: