R语言如何在政府公布时区政策变更后更新时区信息?
问题背景
巴西于2019年废除夏令时,该公告于2019年4月发布。所有2019年之前安装的R内置的夏令时规则未同步更新,会出现计算错误,示例复现代码如下:
as.POSIXlt("2019-12-15",tz = 'America/Sao_Paulo')$isdst # 若R安装于2019年之前,运行该代码将返回1(Windows系统下测试)
解决方案
无需重新安装R,该问题是R内置的时区数据库(Olson数据库)未更新导致的,仅更新时区数据库即可:
- 通用跨系统方案(优先选择):使用
tzupdater包一键更新时区数据库,运行如下代码后重启R即可生效install.packages("tzupdater") library(tzupdater) update_tz_db() - 效果验证:再次运行上述测试代码,返回值为
0则代表更新成功。 - 不同系统备选方案:
- Windows系统:如果
tzupdater安装失败,可将R升级到4.0及以上版本,新版R内置的时区数据库已经包含巴西最新的时区规则。 - Linux系统:可先更新系统层面的时区数据,再重启R即可生效,对应命令如下:
- Debian/Ubuntu 系列:
sudo apt update && sudo apt install -y tzdata - CentOS/RHEL 系列:
sudo yum update -y tzdata
- Debian/Ubuntu 系列:
- Windows系统:如果
- 额外提示:如果你日常使用
lubridate、timechange等涉及时区处理的第三方包,建议同步更新到最新版本,避免包本身缓存旧的时区规则导致计算错误。
内容的提问来源于stack exchange,提问作者user3226167
相关产品推荐
相关产品推荐

