如何解决R Shiny应用时区问题?无法识别‘GMT+5’时区
解决R Shiny应用时区警告问题
问题分析
你在使用lubridate::parse_date_time()时指定的时区"GMT+5"不属于R认可的标准时区标识符,这导致解析日期时间时反复抛出未知时区的警告,不仅拖慢应用启动速度,部署到服务器后问题依然存在。
错误示例
启动时的警告:
Warning in strptime(.enclose(x), .enclose(fmt), tz) : unknown timezone 'GMT+5'
Warning in as.POSIXct.POSIXlt(x) : unknown timezone 'GMT+5'
...(警告重复出现)
部署后的警告:
Warning in with_tz.default(x, tz) : Unrecognized time zone 'GMT+5'
...(警告重复出现)
解决方案
将时区参数替换为R支持的标准格式,以下两种方式均有效:
1. 使用IANA标准时区名称
东五区对应的常见标准时区名称(以实际所在地区为准):
Asia/Karachi(巴基斯坦,UTC+5)Asia/Tashkent(乌兹别克斯坦,UTC+5)Asia/Dushanbe(塔吉克斯坦,UTC+5)
修改后的代码:
data$x <- parse_date_time(data$x, orders = c("dmy HM", "dmy H", "dmY HM", "dmY"), tz="Asia/Karachi") data2$x <- parse_date_time(data2$x, orders = c("dmy HM", "dmy H", "dmY HM", "dmY"), tz="Asia/Karachi")
2. 使用Etc/GMT偏移格式(注意反向规则)
R中Etc/GMT系列的命名规则是反向偏移:UTC+N对应Etc/GMT-N,UTC-N对应Etc/GMT+N。因此东五区(UTC+5)需要写为"Etc/GMT-5":
data$x <- parse_date_time(data$x, orders = c("dmy HM", "dmy H", "dmY HM", "dmY"), tz="Etc/GMT-5") data2$x <- parse_date_time(data2$x, orders = c("dmy HM", "dmy H", "dmY HM", "dmY"), tz="Etc/GMT-5")
验证步骤
在R控制台执行以下代码,确认时区格式有效(无警告输出):
# 测试IANA时区 lubridate::with_tz(Sys.time(), tz = "Asia/Karachi") # 测试Etc/GMT时区 lubridate::with_tz(Sys.time(), tz = "Etc/GMT-5")
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

