Due to the current gap in continued funding from the U.S. National Science Foundation (NSF), the NSF Unidata Program Center has temporarily paused most operations. See NSF Unidata Pause in Most Operations for details.
I will attempt to give a little background and describe Unidata's recommendation on how time should be stored in netCDF files. The dimensions of netCDF variables often correspond to coordinates, one of which may represent time. For each "coordinate dimension" there is likely to be a variable which carries coordinate values corresponding to indices along the dimension. For example, as shown in the NetCDF Users Guide, it is common to have a netCDF dimension named "time" and a singly dimensioned netCDF variable with the same name, "time(time)," called a coordinate variable. The ncdump utility has special features for displaying the values of coordinate variables. We believe it is desirable for coordinate values of all kinds to be treated similarly. This allows generic analysis/display packages to handle space and time coordinates interchangably, for example, and several netCDF-based software packages already do this. Therefore, we have sought ways to represent time that require neither multiple numbers nor character strings for each time value. Our solution exploits: 1) the netCDF capability for assigning a unit of measure to each variable, in the form of an attribute, and 2) a nice units conversion package, udunits, which is available as a companion to the netCDF library. Units of measure are character strings which adhere to the (rather flexible) grammar employed in udunits; when units of measure are conformable, udunits may be used to determine the relationships between them and perform conversions. Critical to this discussion is the fact that a units descriptor string may contain an origin. The following example is taken from the NetCDF Users Guide: time:units = "hours since 1990-11-25 12:00 UTC"; Another example, which corresponds precisely to the standard measure of time in UNIX systms, is: time:units = "seconds since 1970-1-1"; Similarly, the units may be in years, days, nanoseconds, and so forth. With this mechanism, one can store time values in conventional numerical formats (integer, real, double, etc.) and meet any accuracy requirement we can envision. For more detail, please see the udunits documentation. Thus, the Unidata recommendations for representing time values in netCDF files are: * Store time values in numerically typed variables (not attributes). * Assign each such variable its proper unit of measure and origin by using the associated "units" attribute. * Values assigned to these "units" attributes should be interpetable by the udunits package. David Fulker Unidata Program Center Director University Corporation for Atmospheric Research Boulder, Colorado
netcdfgroup
archives: