从原点开始的分钟数转换为正常人的日期时间 ("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))
我正在处理一个 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))