问题描述
我正在处理一个 netcdf 文件,它的时间单位描述为: “自 1850-01-16T14:06:00 以来的分钟数”
我希望它采用更熟悉的日期格式,以便于日期匹配和处理。给出的来源很有帮助,但我无法确定我是否使用了错误的解析格式,或者日期是否真的不符合我的期望。
我查看了 strptime()
和 as.POSIXct()
的帮助,但一直无法弄清楚使用什么格式来解析这个奇怪的时间结构。
# Example of the origin format and first 8 values
origin <- "1850-01-16T14:06:00"
dates_as_times <- c(52559874,52602354,52644834,52688754,52732674,52776594,52820514,52865154)
解决方法
有一些用于转换 netcdf 文件的软件包
library(RNetCDF)
library(lubridate)
out <- utcal.nc("minutes since 1850-01-16T14:06:00",dates_as_times)
out
# year month day hour minute second
#[1,] 1949 12 23 12 0 0
#[2,] 1950 1 22 0 0 0
#[3,] 1950 2 20 12 0 0
#[4,] 1950 3 23 0 0 0
#[5,] 1950 4 22 12 0 0
#[6,] 1950 5 23 0 0 0
#[7,] 1950 6 22 12 0 0
#[8,] 1950 7 23 12 0 0
从 matrix
,它可以很容易地转换为 Datetime
对象,ISOdatetime
with(as.data.frame(out),ISOdatetime(year,month,day,hour,minute,second,tz = 'GMT'))
#[1] "1949-12-23 12:00:00 GMT" "1950-01-22 00:00:00 GMT" "1950-02-20 12:00:00 GMT" "1950-03-23 00:00:00 GMT"
#[5] "1950-04-22 12:00:00 GMT" "1950-05-23 00:00:00 GMT" "1950-06-22 12:00:00 GMT" "1950-07-23 12:00:00 GMT"
或者另一种选择是
library(ncdf.tools)
convertDateNcdf2R(dates_as_times,origin = ymd_hms(origin))
或者我们可以乘以 60
as_datetime(dates_as_times * 60,origin = ymd_hms(origin))