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.
Dipesh, >Date: Fri, 13 Aug 2004 14:41:47 -0700 >From: Dipesh Patel <address@hidden> >Organization: USDA >To: "'Steve Emmerson'" <address@hidden> >Subject: RE: 20040813: building UDUNITS on Cygwin > Keywords: 200408131907.i7DJ7QaW021117 UDUNITS The above message contained the following: > Sorry to keep bugging you...but I got the 1.12.1 version to compile. > In the CUSTOMIZE file, when I defined the CPPFLAGS macro, I had set it to > the following: > > CPPFLAGS=-Df2cFortran -DNDEBUG > > Well, it didn't like the space, so I just took off the -DNDEBUG flag and > then it worked fine. > > But, I still have the off by 1 second error. Here is the test > program I'm using: > > #include <iostream> > > #if defined(__cplusplus) > extern "C" > { > #include "udunits.h" > } > #endif > > using namespace std; > > int main(int argc, char *argv[]) > { > int year = 2003; > int month = 5; > int day = 30; > int hour = 10; > int min = 35; > float sec = 20; > string timeUnitStr = "minutes since 1800-01-01 00:00:00"; > double timeStamp; > utUnit timeUnit; > > // Initialize udunits package > utInit(""); > > utScan(timeUnitStr.c_str(), &timeUnit); > > cout << "BEFORE: " << endl; > cout << "Year : " << year << endl; > cout << "Month: " << month << endl; > cout << "Day : " << day << endl; > cout << "Hour : " << hour << endl; > cout << "Min : " << min << endl; > cout << "Sec : " << sec << endl; > > utInvCalendar(year, month, day, hour, min, sec, > &timeUnit, &timeStamp); > > utCalendar(timeStamp, &timeUnit, &year, &month, &day, &hour, &min, > &sec); > > cout << "AFTER: " << endl; > cout << "Year : " << year << endl; > cout << "Month: " << month << endl; > cout << "Day : " << day << endl; > cout << "Hour : " << hour << endl; > cout << "Min : " << min << endl; > cout << "Sec : " << sec << endl; > > return 0 ; > } > > I get the following output when I run this program. Notice that "sec" > before I run utInvCalendar and utCalendar is "20", but after I lose a second > and it becomes "19". Any idea of why this might be happening on Cywin? > > BEFORE: > Year : 2003 > Month: 5 > Day : 30 > Hour : 10 > Min : 35 > Sec : 20 > AFTER: > Year : 2003 > Month: 5 > Day : 30 > Hour : 10 > Min : 35 > Sec : 19 If you increase the precision with wich the "sec" variable is printed, does the difference decrease? Regards, Steve Emmerson