r - 如何将数字转换为正常日期?

标签 r date netcdf

我有一个 netcdf 文件可以从中提取一些变量。提供商告诉我时间变量 (A) 是自 1900-01-01 00:00:0.0 以来的小时数。我需要将此变量转换为正常日期并写入另一个 txt 文件。

f1 <- open.ncdf("C:\\Users\\data.nc")
# [1] "file C:\\Users\\data.nc has 3 dimensions:"
# [1] "longitude   Size: 2"
# [1] "latitude   Size: 2"
# [1] "time   Size: 2920"
# [1] "file C:\\Users\\data.nc has 5 variables:"
# [1] "short stm[longitude,latitude,time]  Longname:soil textre Missval:-32767"

时间:

A <- get.var.ncdf(nc=f1,varid="time")
head(A)
## [1] 990552 990558 990564 990570 990576 990582

另一个变量:

B1 <- get.var.ncdf(nc=f,varid="stm")
write.table(t(rbind(A,B1)),file="output.txt")

在写入文本输出文件之前,我需要你的帮助将时间变量转换为正常日期。

最佳答案

日期

如果 A 是自 "1900-01-01" 以来的小时数,只需将它们除以 24,然后将此日期传递到 origin as.Date 函数中的参数,如

A <- c(990552, 990558, 990564, 990570, 990576, 990582)
as.Date(A/24, origin = "1900-01-01")
## [1] "2013-01-01" "2013-01-01" "2013-01-01" "2013-01-01" "2013-01-02" "2013-01-02"

日期+时间

如果您也想要小时数,请改用 as.POSIXct 并乘以 3600(您可能也应该在 tz 参数中指定您的时区)

as.POSIXct(A*3600, origin = "1900-01-01")
## [1] "2013-01-01 02:00:00 IST" "2013-01-01 08:00:00 IST" "2013-01-01 14:00:00 IST" "2013-01-01 20:00:00 IST" "2013-01-02 02:00:00 IST" "2013-01-02 08:00:00 IST"

时区

要知道您的时区,请输入

Sys.timezone()

要获得可能时区的完整列表,请输入

OlsonNames()

添加/删除时间

无论哪种方式,您都可以通过将小时数乘以 3600 并从结果中添加/删除来删除/添加小时数,例如

as.POSIXct(A*3600, origin = "1900-01-01") - 2*3600

关于r - 如何将数字转换为正常日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28929063/

相关文章:

r - 消失的按钮 - 点击后

r - 将 data.frame 中的所有列乘以第一个

java - 无法解析芬兰语言环境中的日期

postgresql - 在 PostgreSQL 中对连续日期进行分组

Python 绘制数据(配置文件)

R sf - 如何平移多边形?

减小 glmer 模型大小

javascript - 在 JavaScript 中计算日期

r - 操作netcdf文件中的变量并重新写入

Fortran - 想要四舍五入到小数点后一位