从原点开始的分钟数转换为正常人的日期时间 ("yyyy-mm-dd HH:MM:SS")?

Convert from minutes since origin to date time for normal people ("yyyy-mm-dd HH:MM:SS")?

我正在处理一个 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))