[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[UDUNITS #SJT-401280]: Problem converting "days since ..." YYYY/MM
- Subject: [UDUNITS #SJT-401280]: Problem converting "days since ..." YYYY/MM
- Date: Wed, 23 Mar 2011 11:18:57 -0600
Chad,
> I'm currently building a Fortran 2003 interface for Udunits 2.
Cool! Can I get it from you when you're done?
> I'm having
> some trouble testing it though. I need UDUNITS to convert "days since ..."
> to YYYY/MM. In my testing, I became convinced that the interface didn't work
> properly. But I then did some testing in C and found that I'm probably not
> calling UDUNITS properly in either language. Below is code to illustrate
> what my issue is. I've used Udunits 2 in the context of using David Pierce's
> calcalcs extensions of udunits 2's functionality. This involved calling
> ut_read_xml, ut_parse and then utCalendar2_cal. utCalendar2_cal recieves the
> ut_unit type variable passed from ut_parse so it knows what the referene
> time is.
The "ut_unit" type is intended to be opaque: clients should neither know about
nor care about the details of its implementation. The "calcalcs" package is
taking a risk if it uses those details.
> In using udunits 2 only, I call ut_read_xml, ut_parse and then
> ut_decode_time. The result however is relative to January 1, 2001 00:00:00.
> How do I make udunits2 aware of my preferred time origin?
I don't understand why you would want to set the time-origin of the UDUNITS-2
package. What's the use-case or user-story that you're trying to implement?
> Also, is it possible to suppress the "... overrides prefixed-unit ..."
> warnings upon calling ut_read_xml?
To eliminate the warning messages, precede the call to "ut_read_xml" with a
call to "ut_set_error_message_handler":
ut_set_error_message_handler(ut_ignore);
unitSystem = ut_read_xml(_xmlPath);
> Chad
>
>
> example code:
>
> /*
> gcc -Wall -Wextra -pedantic -std=c89 udunits2_demo.c -ludunits2 && ./a.out
> */
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <udunits2.h>
>
> int main(void)
> {
> const char *units = "days since 1800-1-1 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, units, UT_ASCII)) == NULL ){
> fprintf(stderr, "Unable to the unit string %s!\n", units);
> exit(EXIT_FAILURE);
> }
>
> time = 18277.5;
>
> ut_decode_time(time, &year, &month, &day, &hour, &minute, &second,
> &resolution);
>
> fprintf(stdout, "%4d %2d %2d %2d %2d %3.1f\n", year, month, day, hour,
> minute, second);
>
> /*
> output is: 2001 1 1 5 4 37.5
> should be: 1850 1 16 12 0 0.0
> */
>
> return(EXIT_SUCCESS);
> }
Regards,
Steve Emmerson
Ticket Details
===================
Ticket ID: SJT-401280
Department: Support UDUNITS
Priority: Normal
Status: Closed