将自起源的分钟数转换为正常人的日期时间“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))