如何用R将Sentinel-2的Unix时间戳正确转换为日期格式?
解决R语言中毫秒级Unix时间戳转日期的问题
问题原因
你的时间戳是毫秒级Unix时间戳(13位数字),但R的as.POSIXct默认解析的是秒级时间戳(10位数字),直接传入会导致时间被放大1000倍,因此得到了错误的未来日期。
解决方案
方法1:基础R实现(手动转换为秒级)
先将毫秒时间戳除以1000转换为秒级,再进行日期转换:
dates <- c(1577876409428, 1578308409796, 1578740409279, 1579172409017, 1579604408531) new_date <- as.Date(as.POSIXct(dates / 1000, origin = "1970-01-01")) # 输出结果 new_date
执行后会得到正确的日期:
[1] "2020-01-01" "2020-01-06" "2020-01-11" "2020-01-16" "2020-01-21"
方法2:使用lubridate简化操作
利用lubridate包的as_datetime函数,直接指定时间单位为毫秒(unit = "ms"):
library(lubridate) dates <- c(1577876409428, 1578308409796, 1578740409279, 1579172409017, 1579604408531) new_date <- as.Date(as_datetime(dates, unit = "ms")) # 输出结果 new_date
同样会得到符合预期的日期序列,与你描述的「2020/01/01开始每5天一次」完全匹配。
内容的提问来源于stack exchange,提问作者sermomon
相关产品推荐
相关产品推荐

