如何在R中从Excel导入的1904-01-21 03:18:35提取纯时间
解决Excel时间差导入R后变为1904年日期的问题
问题本质
Excel中设置为hh:mm:ss的日期差值,本质是以天为单位的小数(例如3小时18分35秒对应3/24 + 18/(24*60) + 35/(24*3600)),Excel通过格式将其显示为时间;导入R时,因Excel使用1904日期系统,这个小数被转换为1904-01-01加上对应天数的日期值。
解决方法
方法1:导入时直接识别为时间差(推荐)
使用readxl包导入时,将对应列指定为数值类型,再转换为标准时间差格式:
library(readxl) # 导入时指定目标列为numeric类型 df <- read_excel("你的文件.xlsx", col_types = c("numeric")) # 替换为实际列位置/名称 # 将数值转换为hh:mm:ss格式的时间差 library(hms) df$time_diff <- hms::hms(seconds = df$目标列名 * 86400) # 1天=86400秒
方法2:导入后从日期值还原时间差
若已导入为POSIXct类型的日期,计算其与1904年起始日期的差值:
# 假设导入后的日期列名为date_col origin <- as.POSIXct("1904-01-01", tz = "UTC") # 计算时间差(单位:秒) df$time_diff_sec <- difftime(df$date_col, origin, units = "secs") # 转换为hh:mm:ss格式 df$time_diff <- hms::hms(as.numeric(df$time_diff_sec))
方法3:直接提取时间字符串
若仅需字符串形式的hh:mm:ss,直接格式化日期列:
df$time_str <- format(df$date_col, "%H:%M:%S")
注意事项
- 若Excel使用1900日期系统,需将
origin改为"1900-01-01"; hms包生成的hms类型支持直接参与时间计算,且默认显示为hh:mm:ss格式。
内容的提问来源于stack exchange,提问作者Amita Pathak
相关产品推荐
相关产品推荐

