Steve, Alan, I entirely agree that the only sane, cross-platform and cross-language way of dealing with the timegm (and possible gmtime) problem is to add our own implementation. This is relatively straightfoward and I can see no reason not to. The bigger question is whether we carry on using strftime. Systems with limitations in gmtime (like no negative values for time_t) are likely to be limited with respect to strftime as well. Replacing and maintaining this is a much bigger job though.
Andrew On Mon, Sep 01, 2008 at 10:59:23PM -0700, Alan Irwin wrote: > Hi Steve: > > Since this is a broader topic, I have changed the subject line. > > On 2008-09-02 02:14+0100 Schwartz, Steven J wrote: > > > Alan, > > > Your approach in example 29 is to use the TZ environment variable to trick > your computer into thinking that it is in a UTC timezone. This doesn't work > on all platforms, hence your ifdef for Windows. > > To explain some background here, I was following the POSIX-compliant > approach recommended as an alternative to timegm by the timegm man page on > Linux. That said, I think we agree our example programs should demonstrate > the best methods if at all possible, and I am not particularly happy with > this POSIX-compliant method for obtaining UTC time in seconds since the Unix > epoch from broken-down time. For one thing, it appears not to work for > Jerry's Mac OS X platform for unknown reasons, and you have mentioned some > other reasons as well which I largely agree with. > > > An alternative approach, which I offered in a (small) patch several weeks > back, is essentially a private and totally portable implementation of > timegm, which I called mktimeutc, that lives inside plplot - but which > could/should be made available to the end user. This guarantees that the > plplot time axis handling will behave itself and that the end-user has a > consistent way to construct and break-down a calendar time. > > We have dealt with a similar issue recently with random numbers, and in the > end we decided to embed our own small high-quality random-number generator > into our C library with that generator available for each of our language > bindings to give us uniform results for all languages and as a general > service to our users who often do need access to high-quality RNG's. > > I think we should follow a similar approach with UTC, but aim for the > absolutely best algorithm possible with none of the limitations of the > POSIX algorithms. > > If no core developer objects to that idea, then I have some ideas about how > this should be implemented. > > (1) Rename mktimeutc as pltimeutc to be consistent with the rest of our names. > > (2) I haven't actually looked at that routine yet, but I think we should > carefully review the argument list and what is returned. > > I would favour representing broken-down time as yyyy, mmmm, dddd, hhhh, > mmmm, ssss, where the first 5 arguments are integers and the last double > precision. And I think we should store the result (seconds since the Unix > epoch) as two additional double precision arguments where the first one > represents the integer number of seconds since the epoch (and which is > therefore exact for a huge range of epochs) and the second one a fractional > remainder. As a result this would be a void function. > > (3) I think we need a plutctime void function as well to be the exact > inverse of pltimeutc with essentially no range limitation (unlike gmtime) > and using the same argument list (perhaps in different order) as pltimeutc. > Do you have access to such code, and if so, would you be willing to > donate it to PLplot? > > (4) Thoroughly test plutctime to make sure it delivers the same result as > gmtime within the latter's range limitations, and thoroughly test pltimeutc > to make sure it reliably delivers the inverse of plutctime. > > How do you handle the leap-second problem for the current mktimeutc? Do you > ignore leap seconds altogether (which is probably not a good idea) or do you > have a table of leap seconds within the routine? > > (5) Assuming pltimeutc and plutctime pass all our tests, make them part > of our public C library API and make them available for each of our language > bindings so that we no longer have to adopt hard-coded constants for > example 29 for any language and also as a service for our scientific > users who deal with plotting of time series. > > Before any core developer complains about reinventing the wheel, I am > concerned about that issue as well, but I think our recent experience with > example 29 shows that the C library does a horrible job of dealing with UTC, > and that is true for some of the other computer languages as well. Thus, I > think it is a good idea for PLplot to step forward to fill this gap > uniformly for all our language bindings to the benefit of our users who are > concerned with plotting time series. > > Alan > __________________________ > Alan W. Irwin > > Astronomical research affiliation with Department of Physics and Astronomy, > University of Victoria (astrowww.phys.uvic.ca). > > Programming affiliations with the FreeEOS equation-of-state implementation > for stellar interiors (freeeos.sf.net); PLplot scientific plotting software > package (plplot.org); the libLASi project (unifont.org/lasi); the Loads of > Linux Links project (loll.sf.net); and the Linux Brochure Project > (lbproject.sf.net). > __________________________ > > Linux-powered Science > __________________________ > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Plplot-devel mailing list > Plplot-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/plplot-devel > ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Plplot-devel mailing list Plplot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/plplot-devel