毫秒级时间戳格式识别及R语言转换方法咨询
毫秒级Unix时间戳的R语言转换方案
时间格式说明
你遇到的1647257309550是毫秒级Unix时间戳——它以1970年1月1日00:00:00 UTC为起始点,累计计算到目标时间的毫秒数,对应2022年的时间是合理的。
原代码失败原因
as.POSIXct()函数默认处理的是秒级Unix时间戳,直接传入毫秒数会让计算出的日期远超出正常范围,因此无法得到正确结果。
正确转换方法
方法1:基础R实现(无需额外包)
将毫秒数除以1000转换为秒级时间戳,再用as.POSIXct()处理:
# 基础转换(默认时区) as.POSIXct(1647257309550 / 1000, origin = '1970-01-01') # 指定时区(以上海时区为例) as.POSIXct(1647257309550 / 1000, origin = '1970-01-01', tz = "Asia/Shanghai")
方法2:使用lubridate包(更简洁)
lubridate包的as_datetime()支持直接指定时间单位,无需手动转换:
# 首次使用需安装包 install.packages("lubridate") library(lubridate) # 毫秒级时间戳转换(默认时区) as_datetime(1647257309550, unit = "ms") # 指定时区 as_datetime(1647257309550, unit = "ms", tz = "Asia/Shanghai")
内容的提问来源于stack exchange,提问作者Karsten W.
相关产品推荐
相关产品推荐

