as.POSIXct因夏令时导致部分时间返回NA的异常问题排查
为什么as.POSIXct解析"26/03/2006 02:05:38"返回NA?
这可不是as.POSIXct的Bug哦,问题出在夏令时(DST)的时间切换上!
你看到的返回结果里带了CEST(欧洲中部夏令时间),说明你的系统默认时区是欧洲中部时区(CET/CEST)。2006年3月26日这天,欧洲中部时区会从冬令时(CET,UTC+1)切换到夏令时(CEST,UTC+2):在当地时间凌晨2点整,时钟会直接向前拨1小时到3点。也就是说,当天的02:00:00到02:59:59这段时间在现实中是不存在的——时间从01:59:59直接跳到03:00:00。
所以当你用as.POSIXct("26/03/2006 02:05:38", format="%d/%m/%Y %H:%M:%S")解析时,这个时间在当前时区里是无效的,函数自然返回NA。
而3月27日的02:05:38是完全正常的——因为夏令时已经切换完成,这个时间真实存在,所以能被正确解析。
如果你想验证这个逻辑,可以强制指定UTC时区(UTC没有夏令时切换),这个时间就会被正常解析:
as.POSIXct("26/03/2006 02:05:38", format="%d/%m/%Y %H:%M:%S", tz="UTC") # 返回 [1] "2006-03-26 02:05:38 UTC"
内容的提问来源于stack exchange,提问作者Jeppe Olsen
相关产品推荐
相关产品推荐

