You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:54:59