Ubuntu 23.10更新后R及系统无法识别US/Eastern时区的咨询
Ubuntu 23.10更新后无法识别US/Eastern时区的原因
问题现象
在Ubuntu 23.10(mantic)完成近期更新后,R语言无法识别"US/Eastern"时区,执行相关代码会抛出警告:
sessionInfo() # R version 4.3.2 (2023-10-31) # Platform: x86_64-pc-linux-gnu (64-bit) # Running under: Ubuntu 23.10 # Matrix products: default # BLAS: /opt/R/4.3.2/lib/R/lib/libRblas.so # LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/liblapack.so.3; LAPACK version 3.11.0 # locale: # [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8 LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8 # [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C # time zone: America/New_York # tzcode source: system (glibc) # attached base packages: # [1] stats graphics grDevices utils datasets methods base # other attached packages: # [1] r2_0.10.0 # loaded via a namespace (and not attached): # [1] compiler_4.3.2 clipr_0.8.0 fastmap_1.1.1 cli_3.6.2 tools_4.3.2 htmltools_0.5.7 rmarkdown_2.25 knitr_1.45 xfun_0.41 # [10] digest_0.6.34 rlang_1.1.3 evaluate_0.23 lubridate::with_tz(Sys.time(), tzone = "US/Eastern") # Warning in with_tz.default(Sys.time(), tzone = "US/Eastern") : # Unrecognized time zone 'US/Eastern' # [1] "2024-03-18 13:49:56"
该问题并非仅存在于R语言中,操作系统层面同样无法正常识别US/Eastern时区:
$ TZ="America/New_York" date Mon Mar 18 10:22:03 AM EDT 2024 $ TZ="US/Eastern" date Mon Mar 18 02:22:07 PM 2024
(注意第二条命令输出中缺少时区标识)
对比Ubuntu 22.04的正常情况
在R版本相同的Ubuntu 22.04(jammy)系统中,US/Eastern时区可正常识别并使用:
sessionInfo() # R version 4.3.2 (2023-10-31) # Platform: x86_64-pc-linux-gnu (64-bit) # Running under: Ubuntu 22.04.4 LTS # Matrix products: default # BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 # LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0 # locale: # [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C # time zone: Etc/UTC # tzcode source: system (glibc) # attached base packages: # [1] stats graphics grDevices utils datasets methods base # loaded via a namespace (and not attached): # [1] compiler_4.3.2 lubridate::with_tz(Sys.time(), tzone = "US/Eastern") # [1] "2024-03-18 09:49:19 EDT"
原因分析
问题的核心是glibc时区数据库的版本更新:
- Ubuntu 23.10搭载的glibc版本正式移除了
US/Eastern这类旧式时区别名,仅保留标准的IANA时区标识符(如America/New_York)。 - 这类旧式别名原本是为兼容旧系统而保留的过渡方案,在新版glibc中被彻底废弃,导致系统本身以及依赖系统时区服务的R语言都无法再识别这些别名。
- 系统层面的
date命令输出差异也验证了这一点:使用标准IANA时区时能正常显示时区标识(EDT),而使用旧式别名时输出缺少时区信息,说明系统无法正确解析该别名。
内容的提问来源于stack exchange,提问作者r2evans
相关产品推荐
相关产品推荐

