日期之间的小时数

时间:2014-03-17 21:07:54

标签: r date netcdf

我有一个netCDF文件,我正在尝试识别文件中的第一个日期和基准日期'。该文件包含每月数据。我的笔记相当陈旧,表明第一个日期是1948年1月1日。

以下R代码的第一个日期为17067072:

library(ncdf)
library(chron)
my.data <- open.ncdf('my.netCDF.nc')
x = get.var.ncdf(my.data, "lon" )
y = get.var.ncdf(my.data, "lat" )
z = get.var.ncdf(my.data, "time")
z[1:5]

#  [1] 17067072 17067816 17068512 17069256 17069976

我下载了一个名为ncdump.exe的应用程序,并在Windows命令窗口中输入以下行:

C:\Users\Mark W Miller\ncdump>ncdump -h my.netCDF.nc

我了解到基准日期是:

time:units = "hours since 1-1-1 00:00:0.0" ;

使用以下方法在R中获得相同的基础数据:

att.get.ncdf(my.data,"time","units")$value
[1] "hours since 1-1-1 00:00:0.0"

我尝试使用以下R代码验证:

date1 <- as.Date("01/01/0001", "%m/%d/%Y")
date1
# [1] "0001-01-01"

date2 <- as.Date("01/01/1948", "%m/%d/%Y")
date2
# [1] "1948-01-01"

period <- as.Date(date1:date2, origin = "00-01-01")

hours <- 24 * (length(period)-1)
hours
# [1] 17067024

z[1]中的数字与上面R代码返回的数字相差48小时:

17067072 - 17067024
[1] 48

我的错误在哪里?由于netCDF文件包含月度数据,我怀疑第一个日期是1948年1月3日。我下载数据的网站不提供选择月内日期的选项。

可以从此处下载应用程序ncdump.exe

http://www.narccap.ucar.edu/data/ascii-howto.html

如果我能弄清楚如何对netCDF文件进行子集化,我可能会在某处上传较小的文件。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

你看过你的period向量了吗?当我看到前几个和最后几个值时,这一年出现的事情是没有意义的。可能有些东西在其中一次转换中搞砸了。

另请注意,相同的计算机程序将1900视为闰年,即使它不是,因此该系数的2个程序之间的差异可能占您差异中的24小时。