On Wed, 6 Aug 2003 10:11:20 -0700, Stephan T. Lavavej wrote
> [Jeff Garland]
> > The downside of this is that when you are printing a time duration:
> >  std::cout << td.hours() << ':' << td.minutes() << ':' << td.seconds();
> > you have to take remove the sign from the minutes and seconds.
> > I have a third suggestion:
> > - Implement (1) using abs() in the hours() method
> > - Add a total_seconds function to the library so you don't have to write
> > it.
> 
>[Stephan T. Lavavej]
> How about:
> 
> * Implement (2), making all components negative if the time_duration 
> is negative * Add a total_seconds() fxn so users don't have to write 
> it * Allow users to lexical_cast<string> a time_duration so it can 
> be printed as "-5:34:22" and document this so that users don't try 
> to roll their own naively.

I believe to_simple_string does what you are suggesting so you shouldn't need 
lexical_cast.

> Some unrelated issues that have come to me while working with date_time:
> 
> * The documentation could stand some revision. There's apparently daylight
> saving time stuff in the code, but it's not documented at all. 

Yes, the DST part of the library is under experiment and revision which
is why there is a lack of documentation.  

> * It's also not obvious from the documentation where things like 
> January and Tuesday live. This applies generally; it's not obvious 
> what namespace many functions and classes live in.

Ok.  The answer is there are 3 namespaces: boost::date_time, 
boost::gregorian, and boost::posix_time.  boost::date_time is where
'time system independent' or reuseble components live. boost::gregorian and
boost::posix_time are 'instances' of a set of compatible temporal types and
related classes built from the components in boost::date_time.  Mostly they
are comprised of typedefs of templates in boost::date_time and selection of
specific implementations (eg: selecting the size integer to use for the time
duration). So January ends up living in both date_time and gregorian. You can
imagine needing it to build 'MyAlternativeDateSystem' and wanting the enum for
the interface.

> * I looked at the code and determined that Sunday = 0 (it's an 
> enumeration), but it'd be nice if this were guaranteed in the 
> documentation. 

Ok.
 
> * One example shows:
> last_kday_of_month lkm(Monday,Jan);
> date d = lkm.get_date(2002);//2002-Jan-28
> 
> I found that I had to write:
> first_kday_of_month<date>(Sunday, Apr).get_date(2002)

This was a bug (missing typedef) that has been fixed.  If you update your
boost/date_time/gregorian/gregorian_types.hpp you will pick it up.

> Shouldn't the fact that first_kday_of_month and its ilk are 
> templated be documented?  I was confused why I have to template it 
> on date in the first place (what else would go there?).

Well sure, but virtually everything in the library is a template so that isn't
going to help much.  

If you want to see more about what is under the hood I recommend looking at:

http://www.crystalclearsoftware.com/libraries/gdtl/gdtl_ref_guide/index.html

or

http://www.crystalclearsoftware.com/libraries/gdtl/gdtl_ref_guide/annotated.html

HTH,

Jeff






_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to