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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:45:19