【问题标题】:How to convert numeric numbers into a normal date?如何将数字转换为普通日期?
【发布时间】:2015-05-09 20:17:09
【问题描述】:

我有一个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")

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

【问题讨论】:

    标签: r date netcdf


    【解决方案1】:

    日期

    如果A 距离"1900-01-01" 有几个小时,只需将它们除以24,然后将此日期传递给as.Date 函数中的origin 参数,如

    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
    

    【讨论】:

    • 谢谢。这些数据集每 6 小时提供一次00,06,12,18 as you can see we have this date 2013-01-01`四次。我们如何在写作之前将时间添加到日期?
    • 使用as.POSIXct("1900-01-01") + A*60*60
    • 是的,与@lukeAs 评论类似,我也更新了答案。
    • 奇怪,我数据中的第一个日期应该是2013-01-01 00:00:00 你知道为什么会有时间差异吗?应该是00,06,12,18
    • 是的,时区差异。我在回答中说过,您可能也应该指定它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2018-07-13
    • 1970-01-01
    • 2012-08-07
    • 2020-01-09
    相关资源
    最近更新 更多