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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:45:30