R中Lubridate无法正确将dd/mm/yy hh:mm:ss格式转为POSIXct
解决CSV日期时间列转POSIXct格式返回NA的问题
嘿,我明白你现在卡在哪了——用ymd_hms()处理dd/mm/yy hh:mm:ss格式的时间会返回NA,核心原因是这个函数默认是按**年(Year)-月(Month)-日(Day)的顺序解析字符串,但你的datetime列是日(Day)-月(Month)-年(Year)**的格式(比如26/03/2013 21:50),格式顺序完全不匹配,自然识别失败啦!
修正后的代码
把ymd_hms()换成对应顺序的dmy_hms()函数就能解决问题,时区转换的逻辑可以保留:
library(dplyr) library(lubridate) GRS$datetimelocal <- GRS$`datetime` %>% dmy_hms(tz = "UTC") %>% # 按日/月/年+时分秒的格式解析,先转为UTC时区的POSIXct对象 with_tz(tzone = "Australia/Brisbane") # 转换为布里斯班本地时区
验证示例值
拿你给出的26/03/2013 21:50测试一下:
test_time <- "26/03/2013 21:50" dmy_hms(test_time, tz = "UTC") %>% with_tz("Australia/Brisbane") # 输出应为:"2013-03-27 07:50:00 AEST"(布里斯班比UTC快10小时)
额外小提示
如果你的数据里存在部分不带秒的时间格式(比如26/03/2013 21:50),可以用parse_date_time()兼容多种格式:
parse_date_time(GRS$`datetime`, orders = c("dmy HMS", "dmy HM"), tz = "UTC")
这样能同时识别带秒和不带秒的时间字符串,避免出现遗漏。
内容的提问来源于stack exchange,提问作者mikejwilliamson
相关产品推荐
相关产品推荐

