Here's a list of a few things I find unelegant in the date_time package: 1. Order or parameters Consider these declarations: date d(year, month, day); partial_date pd(day, month); So date() uses month before day, while partial_date() uses day before month. 2. No += and -= I can say date1 = date1 + date_duration(3); but not date1 += date_duration(3); 3. Namespace problems Date generators are in different namespaces: Both partial_date and first_kday_of_month are found in boost::date_time, but partial_date is also carried over in boost::gregorian, whereas first_kday_of_month is not. 4. Inconsistent abbreviations If I want the first Thursday in September, I must write: boost::date_time::first_kday_of_month<date> fts(Thursday, Sep); 'Thursday' must not be abbreviated to 'Thu'. 'Sep' must not be unabbreviated to 'September'. 5. Misleading exception string This code: try { date d(2003, Feb, 29); } catch (std::out_of_range exc) { std::cout << "Caught exception: " << exc.what() << std::endl; } surprisingly outputs this text: Caught exception: Day of month value is out of range 1..31 So, it seems that 29 is not in the range 1..31. -- Claus Tondering