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

在R脚本中将ArcGIS返回的字符串型时间戳转为可读日期

解决ArcGIS Rest服务获取的Epoch时间戳转可读日期问题

我来帮你搞定这个全NA的问题!核心原因很简单:你用错了解析规则——WVK_BEGDAT是字符串格式的Unix时间戳(Epoch时间),也就是从1970-01-01 00:00:00 UTC开始累计的秒/毫秒数,但你却用format="%d-%m-%Y"去解析,这个参数是用来处理像"01-05-2023"这类格式化日期字符串的,完全不匹配Epoch时间的逻辑,所以as_date才会返回全NA。

下面是具体的修复步骤:

1. 先确认时间戳的类型(秒/毫秒)

首先查看WVK_BEGDAT的实际值,判断是秒级还是毫秒级Epoch:

# 打印前几个时间戳示例
head(NWB$WVK_BEGDAT)
  • 如果是10位数字(比如1620000000),属于秒级时间戳
  • 如果是13位数字(比如1620000000000),则是毫秒级时间戳

2. 转换为人类可读日期

第一步:把字符串转为数值型

Epoch时间本质是数字,所以先把字符串列转成数值:

NWB$WVK_BEGDAT_num <- as.numeric(NWB$WVK_BEGDAT)

第二步:用lubridate解析为日期

根据时间戳类型选择对应代码:

情况1:秒级时间戳

# 转换为日期,指定时区为CET
NWB$WVK_BEGDAT2 <- as_date(NWB$WVK_BEGDAT_num, origin = "1970-01-01", tz = "CET")

情况2:毫秒级时间戳

需要先除以1000转换为秒:

NWB$WVK_BEGDAT2 <- as_date(NWB$WVK_BEGDAT_num / 1000, origin = "1970-01-01", tz = "CET")

更直观的替代方案:用as_datetime处理

如果需要保留时间部分,或者想更清晰地管理时区,可以先用as_datetime解析为完整时间,再提取日期:

# 秒级示例
NWB$WVK_BEGDAT_datetime <- as_datetime(NWB$WVK_BEGDAT_num, tz = "CET")
# 毫秒级示例
NWB$WVK_BEGDAT_datetime <- as_datetime(NWB$WVK_BEGDAT_num / 1000, tz = "CET")

# 提取日期部分(如果只需要日期)
NWB$WVK_BEGDAT2 <- as_date(NWB$WVK_BEGDAT_datetime)

3. 验证转换结果

转换完成后,用下面的代码查看前几条数据的转换效果,确认是否正确:

head(NWB[c("WVK_BEGDAT", "WVK_BEGDAT2")])

内容的提问来源于stack exchange,提问作者Egge-Jan Pollé

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:44:37