求助:将Plotly选中的数值型日期转换为真实日期(R语言)
解决ggplotly框选获取的毫秒级时间戳转日期问题
这个坑我之前踩过!你拿到的event$x里的数值其实是从1970-01-01 00:00:00 UTC开始计算的毫秒级Unix时间戳,而R自带的as.Date、as.POSIXct默认只认秒级时间戳,直接用肯定转不出正确日期。下面给你具体的解决步骤:
核心转换逻辑
- 先把毫秒级时间戳除以1000,转换成秒级时间戳;
- 用
as.POSIXct把秒级时间戳转成时间对象,指定原点为"1970-01-01"; - (可选)如果只需要日期,再用
as.Date转换即可。
代码示例
用你给出的示例数据(注意你写的数值可能少了一个0,正确的毫秒级时间戳应该是1496534400000这类,对应2017-06-04):
# 你的毫秒级时间戳数据 event_x <- c(1496534400000, 1496620800000, 1496793600000) # 转换为日期格式 converted_dates <- as.Date( as.POSIXct(event_x / 1000, origin = "1970-01-01", tz = "UTC") ) # 查看转换结果 print(converted_dates) # 输出:"2017-06-04" "2017-06-05" "2017-06-07"
如果需要保留具体时间(不是只留日期),可以直接保留POSIXct对象:
converted_datetimes <- as.POSIXct(event_x / 1000, origin = "1970-01-01", tz = "UTC") print(converted_datetimes) # 输出:"2017-06-04 00:00:00 UTC" "2017-06-05 00:00:00 UTC" "2017-06-07 00:00:00 UTC"
为什么之前的方法无效?
- 直接用
as.Date(event_x):R会把数值当成从1970-01-01开始的天数,显然和时间戳不是一个概念; - 直接用
as.POSIXct(event_x):默认处理的是秒级时间戳,你传入的是毫秒级,相当于把日期往后推了1000倍,结果完全不对。
内容的提问来源于stack exchange,提问作者K.murphy
相关产品推荐
相关产品推荐

