This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
Dear Prakash Barman, > I need to convert time value present in a netcdf file, encoded in > UDUNITS (hrs since 1900-01-01 00:00) to general "yyyy-mm-dd hh" format. The > following code I am using. But what ever be the input, it always produces > 2001 1 11 20 32 24.0 as output. Please help me in this regard.... > > #include <stdio.h> > #include <stdlib.h> > #include <udunits2.h> > > int main(void) > { > const char *ref_value = "hour since 1900-01-01 00:00:0.0"; > > ut_system *u_system; > ut_unit *u_unit; > double time; > int year, month, day, hour, minute; > double second, resolution; > > if( (u_system = ut_read_xml(NULL)) == NULL ){ > fprintf(stderr, "Unable to initialize the udunits2 library!\n"); > exit(EXIT_FAILURE); > } > > if( (u_unit = ut_parse(u_system, ref_value, UT_ASCII)) == NULL ){ > fprintf(stderr, "Unable to the unit string %s!\n", ref_value); > exit(EXIT_FAILURE); > } > > time = 937944; > > > ut_decode_time(time, &year, &month, &day, &hour, &minute, > &second,&resolution); > > printf("%4d %2d %2d %2d %2d %3.1f\n", year, month, day, hour, > minute, second); > return(EXIT_SUCCESS); > } You should use a true calendaring package to convert temporal values. Having said that, you can use the UDUNITS-2 package to do approximately what you want (the UDUNITS-2 package doesn't handle leap-seconds). Create a unit that is "seconds since 1900-01-01 00:00:00". Obtain a converter from the "hours" unit to the "seconds" unit. Convert values using this converter. Encode a new value in the "seconds" unit by calling the function "ut_encode_time(1900, 1, 1, 0, 0, secondsSince19000101). Obtain the corresponding calendar time by calling the function "ut_decode_time(encodedTime, &year, &month, &day, &hour, &minute, &second, &resolution). Yes, it's not very convenient. But I would prefer that a true calendaring package be use for such conversions. > Thanks > > Prakash Barman > JRF, Dept. of Physics > Tezpur University, Tezpur Regards, Steve Emmerson Ticket Details =================== Ticket ID: ODN-661035 Department: Support UDUNITS Priority: Normal Status: Closed