R如何将2019-05-01T08:00:00+00:00格式的datetime列拆分为日期和时间列
R拆分ISO格式日期时间列解决方案
- 输出全为
00:00:00的核心原因是时区解析错误:你输入的YearTime列属于UTC时区(后缀+00:00为标识),as.POSIXct默认采用系统本地时区做转换,若你本地时区为东八区(UTC+8),会自动将UTC的8点转换为本地时间0点,就会出现你遇到的全0时间输出问题。 - 额外注意你的代码存在数据源引用不一致问题:第一行从
sf数据框取YearTime生成df$Date,第二行直接调用df$YearTime,如果df本身没有存储YearTime列会额外触发取值异常。
基础R解决方案
解析时明确指定时区为UTC,统一从sf数据源取值即可:
df$Date <- as.Date(sf$YearTime, tz = "UTC") df$Time <- format(as.POSIXct(sf$YearTime, tz = "UTC"), format = "%H:%M:%S")
便捷方案(基于lubridate包)
lubridate可自动识别ISO标准带时区时间格式,无需手动处理时区逻辑:
# 加载lubridate包 library(lubridate) sf$YearTime <- ymd_hms(sf$YearTime) df$Date <- as.Date(sf$YearTime) df$Time <- format(sf$YearTime, "%H:%M:%S")
运行上述代码后,15分钟间隔的时间会正常输出为08:00:00、08:15:00等符合预期的结果。
内容的提问来源于stack exchange,提问作者Xaviermoros
相关产品推荐
相关产品推荐

