• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0" encoding="utf-8"?>
2<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
3"../../../tools/boostbook/dtd/boostbook.dtd">
4
5<!-- Copyright (c) 2001-2006 CrystalClear Software, Inc.
6     Subject to the Boost Software License, Version 1.0.
7     (See accompanying file LICENSE_1_0.txt or  http://www.boost.org/LICENSE_1_0.txt)
8-->
9
10<section id="date_time.changes">
11  <title>Change History</title>
12
13  <!-- if each new change tgroup has a "Bug Fix" as the first "Type", the columns will line up nicely -->
14
15
16    <bridgehead renderas="sect3">Changes from Boost 1.73 to 1.74 </bridgehead>
17  <informaltable frame="all">
18    <tgroup cols="2">
19      <thead>
20        <row>
21          <entry>Type</entry>
22          <entry>Description</entry>
23        </row>
24      </thead>
25      <tbody>
26
27        <row>
28          <entry>Bug-Fix</entry>
29          <entry>
30	    Fix constrained_value::assign to be constexpr so ptime and date construction are constexpr. See:
31            <ulink url="https://github.com/boostorg/date_time/pull/161">pull 161</ulink> and
32	    <ulink url="https://github.com/boostorg/date_time/pull/162">pull 161</ulink>.
33          </entry>
34        </row>
35
36        <row>
37          <entry>Bug-Fix</entry>
38          <entry>
39	    Suppress MSVC CRT deprecations on Clang. See:
40	    <ulink url="https://github.com/boostorg/date_time/pull/160">pull 160</ulink>.
41          </entry>
42        </row>
43
44
45      </tbody>
46    </tgroup>
47  </informaltable>
48
49
50  <bridgehead renderas="sect3">Changes from Boost 1.72 to 1.73 </bridgehead>
51  <informaltable frame="all">
52    <tgroup cols="2">
53      <thead>
54        <row>
55          <entry>Type</entry>
56          <entry>Description</entry>
57        </row>
58      </thead>
59      <tbody>
60
61        <row>
62          <entry>Enhancement</entry>
63          <entry>
64            Make date_time all inline. Users no longer need to link the library for any library functions.
65            Note that an empty stub library is maintained for backward compatibility. Resolves:
66            (<ulink url="https://github.com/boostorg/date_time/issues/134">github issue #134</ulink>) and
67            (<ulink url="https://github.com/boostorg/date_time/issues/85">github issue #85</ulink>).
68
69Remove the link library to resolve linking/visibility concerns
70          </entry>
71        </row>
72
73        <row>
74          <entry>Enhancement</entry>
75          <entry>
76            Support for constexpr has been added when in c++14 mode and above. For example:
77              <code>
78              constexpr microseconds ms(1000);
79              static_assert(ms.total_microseconds() == 1000, "constexpr total_microseconds");
80              </code>
81            (<ulink url="https://github.com/boostorg/date_time/issues/123">github issue #123</ulink>).
82          </entry>
83        </row>
84
85        <row>
86          <entry>Enhancement</entry>
87          <entry>
88            C++20 ambiguous comparison operator warning with clang 10
89            (<ulink url="https://github.com/boostorg/date_time/issues/132">github issue #132</ulink>).
90          </entry>
91        </row>
92
93        <row>
94          <entry>Cleanup</entry>
95          <entry>
96            Deprecated support for legacy io and USE_DATE_TIME_PRE_1_33_FACET_IO macro
97            (<ulink url="https://github.com/boostorg/date_time/issues/61">github issue #61</ulink>).
98          </entry>
99        </row>
100
101        <row>
102          <entry>Bug Fix</entry>
103          <entry>
104            Documentation clarifications for gettimeofday, day_number, and from_iso_extended_string.
105            <ulink url="https://github.com/boostorg/date_time/issues/127">github issue #127</ulink>
106            <ulink url="https://github.com/boostorg/date_time/issues/125">github issue #125</ulink>, and
107            <ulink url="https://github.com/boostorg/date_time/issues/116">github issue #116</ulink>
108          </entry>
109        </row>
110
111
112      </tbody>
113    </tgroup>
114  </informaltable>
115
116
117  <bridgehead renderas="sect3">Changes from Boost 1.41 to 1.44 (date_time 1.08 to 1.09)</bridgehead>
118  <informaltable frame="all">
119    <tgroup cols="2">
120      <thead>
121        <row>
122          <entry>Type</entry>
123          <entry>Description</entry>
124        </row>
125      </thead>
126      <tbody>
127
128        <row>
129          <entry>Bug fix</entry>
130          <entry>
131            The "%T" and "%R" format specifiers are now processed by the library rather than underlying standard facet.
132            This fixes the cases when the placeholders are not supported by the facet
133            (<ulink url="https://svn.boost.org/trac/boost/ticket/3876">#3876</ulink>).
134          </entry>
135        </row>
136
137      </tbody>
138    </tgroup>
139  </informaltable>
140
141  <bridgehead renderas="sect3">Changes from Boost 1.40 to 1.41 (date_time 1.07 to 1.08)</bridgehead>
142  <informaltable frame="all">
143    <tgroup cols="2">
144      <thead>
145        <row>
146          <entry>Type</entry>
147          <entry>Description</entry>
148        </row>
149      </thead>
150      <tbody>
151
152        <row>
153          <entry>Change</entry>
154          <entry>
155            The default format for time durations is now "%-%O:%M:%S%F" instead of "%-%H:%M:%S%F" that was used previously. In order to retain the old behavior, the format string has to be specified explicitly during the time IO facet construction (<ulink url="https://svn.boost.org/trac/boost/ticket/1861">#1861</ulink>).
156          </entry>
157        </row>
158
159        <row>
160          <entry>Bug fix</entry>
161          <entry>
162            Gregorian dates now use 32-bit integer type internally on 64-bit platforms (<ulink url="https://svn.boost.org/trac/boost/ticket/3308">#3308</ulink>).
163          </entry>
164        </row>
165        <row>
166          <entry>Bug fix</entry>
167          <entry>
168            Adjusted UTC time zone offset boundaries in order to allow offsets up to +14 hours (<ulink url="https://svn.boost.org/trac/boost/ticket/2213">#2213</ulink>).
169          </entry>
170        </row>
171
172      </tbody>
173    </tgroup>
174  </informaltable>
175
176  <bridgehead renderas="sect3">Changes from Boost 1.38 to 1.40 (date_time 1.06 to 1.07)</bridgehead>
177  <informaltable frame="all">
178    <tgroup cols="2">
179      <thead>
180        <row>
181          <entry>Type</entry>
182          <entry>Description</entry>
183        </row>
184      </thead>
185      <tbody>
186
187        <row>
188          <entry>Bug fix</entry>
189          <entry>
190            Minor bug fixes (<ulink url="https://svn.boost.org/trac/boost/ticket/2809">#2809</ulink>,
191            <ulink url="https://svn.boost.org/trac/boost/ticket/2824">#2824</ulink>,
192            <ulink url="https://svn.boost.org/trac/boost/ticket/3015">#3015</ulink>,
193            <ulink url="https://svn.boost.org/trac/boost/ticket/3105">#3105</ulink> and others).
194          </entry>
195        </row>
196
197      </tbody>
198    </tgroup>
199  </informaltable>
200
201  <bridgehead renderas="sect3">Changes from Boost 1.34 to 1.38 (date_time 1.05 to 1.06)</bridgehead>
202  <informaltable frame="all">
203    <tgroup cols="2">
204      <thead>
205    <row>
206      <entry>Type</entry>
207      <entry>Description</entry>
208    </row>
209      </thead>
210      <tbody>
211        <row>
212          <entry>Feature</entry>
213          <entry>
214            Added support for formatting and reading time durations longer than 24 hours.
215            A new formatter <code>%O</code> is used indicate such long durations in the
216            format string. The old <code>%H</code> format specifier is thus restricted
217            to represent durations that fit into two characters, in order to retain support
218            for reading durations in ISO format. In case if it is detected that the <code>%H</code>
219            format specifier is used with longer durations, the results are not specified
220            (an assertion in debug builds is raised).
221          </entry>
222        </row>
223
224        <row>
225          <entry>Bug fix</entry>
226          <entry>
227            Added support for GCC 4.3. Several compilation issues were solved, as well as
228            compiler warnings were taken care of.
229          </entry>
230        </row>
231
232        <row>
233          <entry>Bug fix</entry>
234          <entry>
235            Added missing streaming operators for the <code>local_time_period</code> class.
236          </entry>
237        </row>
238
239        <row>
240          <entry>Bug fix</entry>
241          <entry>
242            Added several missing includes in different places. Some includes that are
243            not needed in some configurations were made conditional.
244          </entry>
245        </row>
246
247        <row>
248          <entry>Bug fix</entry>
249          <entry>
250            Solved compilation problem that was caused by not finding streaming operators
251            for <code>gregorian::date_duration</code> via ADL. The type is now made actually
252            a class rather a typedef for the <code>date_time::date_duration</code> template.
253            The similar change was done for <code>gregorian::weeks</code>.
254          </entry>
255        </row>
256
257        <row>
258          <entry>Bug fix</entry>
259          <entry>
260            Added a correctly spelled <code>date_time::hundredth</code> time resolution enum
261            value. The old one <code>date_time::hundreth</code> is considered deprecated and
262            to be removed in future releases.
263          </entry>
264        </row>
265
266        <row>
267          <entry>Bug fix</entry>
268          <entry>
269            Fixed compilation error in <code>format_date_parser.hpp</code> because of incorrect
270            stream type being used.
271          </entry>
272        </row>
273
274        <row>
275          <entry>Bug fix</entry>
276          <entry>
277            On Windows platform made inclusion of <code>windows.h</code> optional. The header is only used
278            when the <code>BOOST_USE_WINDOWS_H</code> macro is defined. Otherwise (and by default),
279            the library uses internal definitions of symbols from this header.
280          </entry>
281        </row>
282
283        <row>
284          <entry>Bug fix</entry>
285          <entry>
286            On Windows platform function <code>from_ftime</code> could return incorrect time if
287            the <code>FILETIME</code> that is being passed to the function contained dates before 1970-Jan-01.
288          </entry>
289        </row>
290
291        <row>
292          <entry>Bug fix</entry>
293          <entry>
294            Fixed a possible crash in <code>gregorian::special_value_from_string</code> if the string
295            did not represent a valid special value.
296          </entry>
297        </row>
298
299        <row>
300          <entry>Bug fix</entry>
301          <entry>
302            Removed the <code>testfrmwk.hpp</code> file from the public include directory. This file
303            was internal for the library tests and was not documented.
304          </entry>
305        </row>
306
307        <row>
308          <entry>Bug fix</entry>
309          <entry>
310            Fixed missing include in <code>filetime_functions.hpp</code>
311            (<ulink url="https://svn.boost.org/trac/boost/ticket/2688">#2688</ulink>).
312          </entry>
313        </row>
314
315        <row>
316          <entry>Bug fix</entry>
317          <entry>
318            Fixed dereferencing end string iterators in different places of code,
319            which could cause crashes on MSVC
320            (<ulink url="https://svn.boost.org/trac/boost/ticket/2698">#2698</ulink>).
321          </entry>
322        </row>
323
324      </tbody>
325    </tgroup>
326  </informaltable>
327
328
329
330  <bridgehead renderas="sect3">Changes from Boost 1.33 to 1.34 (date_time 1.04 to 1.05)</bridgehead>
331  <informaltable frame="all">
332    <tgroup cols="2">
333      <thead>
334	<row>
335	  <entry>Type</entry>
336	  <entry>Description</entry>
337	</row>
338      </thead>
339      <tbody>
340        <row>
341          <entry>Feature</entry>
342          <entry>
343             Updated the data in the date_time_zonespec.csv file to reflect new US/Canada
344             daylight savings time rules for 2007.  If you upgrade to the new file, be aware
345             that the library will only give correct answers for current/future date
346             conversions.  So if you are converting dates from earlier years the answers
347             will reflect current time zone rules not past rules.  The library doesn't support
348             historic timezone rules presently.
349          </entry>
350        </row>
351        <row>
352          <entry>Feature</entry>
353          <entry>
354              Two other dst calculation features have also been update to reflect the new
355              US/Canada timzone rules. This is the boost::date_time::us_dst_rules and
356              dst_calc_engine.  While the us_dst_rules is officially deprecated, a patch
357              by Graham Bennett has been applied which allows this class to work correctly
358              for both historical and future dates.  The dst_calc_engine was updated to also
359              work for historical and future times.  This allows the various local_adjustor
360              classes to work correctly.  There was an interface change for classes using the
361              dst_calc_engine with custom dst traits classes.  The traits classes signatures
362              changed to take a 'year' parameter on most of the methods such as end_month.
363              In addition,  2 new functions are needed on the traits classes:
364                   <code>static date_type local_dst_start_day(year_type year)</code> and
365                   <code>static date_type local_dst_end_day(year_type year)</code>.
366              Implementers should see <code>date_time/local_timezone_defs.hpp</code> for
367              examples.
368          </entry>
369        </row>
370
371        <row>
372          <entry>Bug Fix</entry>
373          <entry>Fix DST traits for Austrialia (sf# 1672139) to set end of DST at 3:00 am instead of 2:00 am.
374          </entry>
375        </row>
376
377        <row>
378          <entry>Bug Fix</entry>
379          <entry>Fix a problem with potential linking error with multiple definitions due
380                 to I/O code.
381          </entry>
382        </row>
383        <row>
384          <entry>Bug Fix</entry>
385          <entry>Changed serialization code in both greg_serialize.hpp and time_serialize.hpp
386                 to eliminate warnings due to unused variables for version and file_version.
387                 Thanks to Caleb Epstein for the patch suggestion.
388          </entry>
389        </row>
390        <row>
391          <entry>Bug Fix</entry>
392          <entry>Fix regression errors that showed up under FreeBSD with GCC and the
393                 LANG environment set to russian -- changed parser to use classic
394                 locale instead of blank locale.
395          </entry>
396        </row>
397
398        <row>
399          <entry>Bug Fix</entry>
400          <entry>Changes for tracker issue 1178092 -- change in convert_to_lower to make
401                 local a const static and speed up parsing.
402          </entry>
403        </row>
404
405        <row>
406          <entry>Bug Fix</entry>
407          <entry>Patches from Ulrich Eckhardt to fix support for EVC++ 4.
408          </entry>
409        </row>
410
411        <row>
412          <entry>Feature</entry>
413          <entry>Reduce the usage of basic_stringstream as much a possible to work around
414                 a bug in the VC8 standard library. See
415                 <ulink url="http://lists.boost.org/Archives/boost/2006/02/101122.php">mailing list archive</ulink>
416                 for more information.
417          </entry>
418        </row>
419
420      </tbody>
421    </tgroup>
422  </informaltable>
423
424
425  <bridgehead renderas="sect3">Changes from Boost 1.32 to 1.33 (date_time 1.03 to 1.04)</bridgehead>
426  <informaltable frame="all">
427    <tgroup cols="2">
428      <thead>
429	<row>
430	  <entry>Type</entry>
431	  <entry>Description</entry>
432	</row>
433      </thead>
434      <tbody>
435        <row>
436          <entry>Bug Fix</entry>
437          <entry>Period lengths, when beginning and end points are the same, or are consecutive, were being incorrectly calculated. The corrected behavior, where end and beginning points are equal, or a period is created with a zero duration, now return a length of zero. A period where beginning and end points are consecutive will return a length of one.
438          </entry>
439        </row>
440        <row>
441          <entry>Bug Fix</entry>
442          <entry>Time_input_facet was missing functions to set iso formats. It also failed to parse time values that did not use a separator (%H%M%S). Both these bugs have been corrected.
443          </entry>
444        </row>
445        <row>
446          <entry>Feature</entry>
447          <entry>Preliminary names of ptime_facet and ptime_input_facet changed to simply time_facet and time_input_facet. The ptime_* versions have been removed all together.
448          </entry>
449        </row>
450        <row>
451          <entry>Feature</entry>
452          <entry>The from_iso_string function failed to parse fractional digits. We added code that correctly parses when input has more digits, or too few digits, that the compiled library precision. Ptimes with only a decimal are also correctly parsed.
453          </entry>
454        </row>
455        <row>
456          <entry>Bug Fix</entry>
457          <entry>The parsing mechanism in the new IO would consume the next character after a match was made. This bug presented itself when attempting to parse a period that had special value for it's beginning point.
458          </entry>
459        </row>
460        <row>
461          <entry>Bug Fix</entry>
462          <entry>The new IO system failed to provide the ability for the user to "turn on" exceptions on the stream. The failbit was also not set when parsing failed. Both of these problems have been fixed.
463          </entry>
464        </row>
465        <row>
466          <entry>Bug Fix</entry>
467          <entry>Parsing of special values, by means of from_*_string functions, has been fixed. This also effects the libraries ability to serialize special values. Time_duration now serializes as either a string or individual fields (depending on is_special()).
468          </entry>
469        </row>
470        <row>
471          <entry>Bug Fix</entry>
472          <entry>Previously, output streaming of <code>partial_date</code> would display the day as either a single or double digit integer (ie '1', or '12'). This has been corrected to always display a double digit integer (ie '01').
473          </entry>
474        </row>
475        <row>
476          <entry>Feature</entry>
477          <entry>Major new features related to management of local times.
478                 This includes the introduction of a series of new classes to
479                 represent time zones and local times (see <link linkend="date_time.local_time">Date Time Local Time</link> for complete details).
480          </entry>
481        </row>
482        <row>
483          <entry>Feature</entry>
484          <entry>Input and output facets have been re-written to support format-based
485            redefinition of formats (see <link linkend="date_time.date_time_io">Date Time IO</link> for complete details).
486          </entry>
487        </row>
488        <row>
489          <entry>Feature</entry>
490          <entry>Functions have been added to facilitate conversions between <code>tm</code> structs for <code>date</code>, <code>ptime</code>, <code>time_duration</code>, and <code>local_date_time</code>. Functions for converting <code>FILETIME</code>, and <code>time_t</code> to <code>ptime</code> are also provided. See the individual sections for details.
491          </entry>
492        </row>
493        <row>
494          <entry>Feature</entry>
495          <entry>A <code>universal_time</code> function has been added to the <code>microsec_time_clock</code> (full details of this function can be found <link linkend="ptime_from_clock">here</link>).
496          </entry>
497        </row>
498        <row>
499          <entry>Feature</entry>
500          <entry>Functions have been added to facilitate conversions between <code>tm</code> structs for <code>date</code>, <code>ptime</code>, <code>time_duration</code>, and <code>local_date_time</code>. Functions for converting <code>FILETIME</code>, and <code>time_t</code> to <code>ptime</code> are also provided. See the individual sections for details.
501          </entry>
502        </row>
503        <row>
504          <entry>Feature</entry>
505          <entry>A <code>universal_time</code> function has been added to the <code>microsec_time_clock</code> (full details of this function can be found <link linkend="ptime_from_clock">here</link>).
506          </entry>
507        </row>
508        <row>
509          <entry>Feature</entry>
510          <entry>Date-time now uses reentrant POSIX functions on those platforms that
511                 support them when BOOST_HAS_THREADS is defined.
512          </entry>
513        </row>
514        <row>
515          <entry>Bug Fix</entry>
516          <entry>Fixed a bug in serialization code where special values
517                (not-a-date-time, infinities, etc) for
518                ptime, time_duration would not read back correctly from an archive.
519                The output serialization code wrote subfields such
520                as time_duration.seconds() which are invalid for special values and
521                thus undefined values.  Thus when read back the values could cause
522                strange behavior including execeptions on construction.
523          </entry>
524        </row>
525        <row>
526          <entry>Bug Fix</entry>
527          <entry>Fixed multiple warnings generated with various platforms/compilers.
528          </entry>
529        </row>
530        <row>
531          <entry>Bug Fix</entry>
532          <entry>Construction of a ptime with a time_duration beyond the range of 00:00 to 23:59:59.9... now adjusts the date and time to make the time_duration fall within this range (ie <code>ptime(date(2005,2,1), hours(-5))</code> -> "2005-Jan-31 19:00:00" &amp; <code>ptime(date(2005,2,1), hours(35))</code> -> "2005-Feb-02 11:00:00").
533          </entry>
534        </row>
535        <row>
536          <entry>Bug Fix</entry>
537          <entry>Time parsing now correctly handles excessive digits for fractional seconds. Leading zeros are dropped ("000100" -> 100 frac_sec), and excessive digits are truncated at the proper place ("123456789876" -> 123456 or 123456789 depending on what precision the library was compiled with).
538          </entry>
539        </row>
540        <row>
541          <entry>Bug Fix</entry>
542          <entry>Changes to the <code>boost::serialization</code> interface broke serialization compatibility for <code>date_time</code>. The user must provide a function to insure <code>date_time</code> objects are <code>const</code> before they are serialized. The function should be similar to:
543            <screen>template&lt;class archive_type, class temporal_type>
544void save_to(archive_type&amp; ar,
545             const temporal_type&amp; tt)
546{
547  ar &lt;&lt; tt;
548}</screen>
549          </entry>
550        </row>
551        <row>
552          <entry>Bug Fix</entry>
553          <entry>Use of the depricated <code>boost::tokenizer</code> interface has been updated to the current interface. This fixes compiler errors on some older compilers.
554          </entry>
555        </row>
556        <row>
557          <entry>Bug Fix</entry>
558          <entry>Templatized formatters in the legacy IO system to accept char type. Also removed calls to <code>boost::lexical_cast</code>.
559          </entry>
560        </row>
561      </tbody>
562    </tgroup>
563  </informaltable>
564
565
566  <bridgehead renderas="sect3">Changes from Boost 1.31 to 1.32 (date_time 1.02 to 1.03)</bridgehead>
567  <informaltable frame="all">
568    <tgroup cols="2">
569      <thead>
570	<row>
571	  <entry>Type</entry>
572	  <entry>Description</entry>
573	</row>
574      </thead>
575      <tbody>
576        <row>
577          <entry>Bug Fix</entry>
578          <entry>Snap to end of month behavior corrected for year_functor. Previously, starting
579                 from 2000-Feb-28 (leap year and not end of month) and iterating through the next
580                 leap year would result in 2004-Feb-29 instead of 2004-Feb-28. This behavior has
581                 been corrected to produce the correct result of 2004-Feb-28. Thanks to Bart Garst
582                 for this change.
583          </entry>
584        </row>
585        <row>
586          <entry>Feature</entry>
587          <entry>Free function for creating a ptime object from a FILETIME struct. This function
588                 is only available on platforms that define BOOST_HAS_FTIME.
589          </entry>
590        </row>
591        <row>
592          <entry>Feature</entry>
593          <entry>Microsecond time clock is now available on most windows compilers as well as
594                 Unix.
595          </entry>
596        </row>
597        <row>
598          <entry>Feature</entry>
599          <entry>Use of the boost::serialization library is now available with most of the
600                 date_time classes. Classes capable of serialization are: date_generator classes,
601                 date, days, date_period, greg_month, greg_weekday, greg_day, ptime, time_duration,
602                 and time_period. Thanks to Bart Garst for this change.
603          </entry>
604        </row>
605        <row>
606          <entry>Feature</entry>
607          <entry>Functions added to convert date and time classes to wstring. The library now
608                 provides to_*_wstring as well as to_*_string functions for: simple, iso,
609                 iso_extended, and sql for dates and compilers that support wstrings. Thanks to
610                 Bart Garst for this change.
611          </entry>
612        </row>
613        <row>
614          <entry>Feature</entry>
615          <entry>Period classes now handle zero length and NULL periods correctly. A NULL period
616                 is a period with a negative length. Thanks to Frank Wolf and Bart Garst for this
617                 change.
618          </entry>
619        </row>
620        <row>
621          <entry>Feature</entry>
622          <entry>Added end_of_month function to gregorian::date to return the last day of
623                 the current month represented by the date.  Result is undefined for
624                 not_a_date_time or infinities.
625          </entry>
626        </row>
627        <row>
628          <entry>Bug Fix</entry>
629          <entry>Removed incorrect usage of BOOST_NO_CWCHAR macro throughout library.
630          </entry>
631        </row>
632        <row>
633          <entry>Feature</entry>
634          <entry>New names added for some date classes. Original names are still valid but may
635                 some day be deprecated. Changes are:
636            <simplelist type='horiz' columns='3'>
637              <member>date_duration</member>
638              <member>is now</member>
639              <member>days</member>
640              <member>nth_kday_of_month</member>
641              <member>is now</member>
642              <member>nth_day_of_the_week_in_month</member>
643              <member>first_kday_of_month</member>
644              <member>is now</member>
645              <member>first_day_of_the_week_in_month</member>
646              <member>last_kday_of_month</member>
647              <member>is now</member>
648              <member>last_day_of_the_week_in_month</member>
649              <member>first_kday_after</member>
650              <member>is now</member>
651              <member>first_day_of_the_week_after</member>
652              <member>first_kday_before</member>
653              <member>is now</member>
654              <member>first_day_of_the_week_before</member>
655            </simplelist>
656          </entry>
657        </row>
658        <row>
659          <entry>Feature</entry>
660          <entry>Free functions for date generators added. Functions are: days_until_weekday, days_before_weekday, next_weekday, and previous_weekday.
661            <screen>days days_until_weekday(date, greg_weekday);
662days days_before_weekday(date, greg_weekday);
663date next_weekday(date, greg_weekday);
664date previous_weekday(date, greg_weekday);</screen>
665	    Thanks to Bart Garst for this change.
666          </entry>
667        </row>
668        <row>
669          <entry>Feature</entry>
670          <entry>New experimental duration types added for months, years, and weeks. These classes
671                 also provide mathematical operators for use with date and time classes.  Be aware
672                 that adding of months or years a time or date past the 28th of a month may show
673                 non-normal mathematical properties.  This is a result of 'end-of-month'
674                 snapping used in the calculation.  The last example below illustrates the
675                 issue.
676
677            <screen>months m(12);
678years y(1);
679m == y; // true
680days d(7);
681weeks w(1);
682d == w; // true
683ptime t(...);
684t += months(3);
685date d(2004,Jan,30);
686d += months(1); //2004-Feb-29
687d -= months(1); //2004-Jan-29</screen>
688            Input  streaming is not yet implemented for these types.
689	    Thanks to Bart Garst for this change.
690          </entry>
691        </row>
692        <row>
693          <entry>Feature</entry>
694          <entry>Unifying base class for date_generators brought in to gregorian namespace. See <link linkend="date_time.examples.print_holidays">Print Holidays Example</link>.
695          </entry>
696        </row>
697        <row>
698          <entry>Feature</entry>
699          <entry>Added constructors for date and ptime that allow for default construction (both)
700                 and special values construction (ptime, both now support this). Default
701                 constructors initialize the objects to not_a_date_time (NADT).
702                 <screen>ptime p_nadt(not_a_date_time);
703ptime p_posinf(pos_infin);
704ptime p; // p == NADT
705date d;  // d == NADT</screen>
706	    Thanks to Bart Garst for this change.
707          </entry>
708        </row>
709	<row>
710	  <entry>Feature</entry>
711	  <entry>Output streaming now supports wide stream output on compiler / standard library combinations that support wide streams. This allows code like:
712	    <screen>std::wstringstream wss;
713date d(2003,Aug,21);
714wss &lt;&lt; d;</screen>
715	    Thanks to Bart Garst for this change.
716	  </entry>
717	</row>
718	<row>
719	  <entry>Feature</entry>
720          <entry>Input streaming for date and time types is now supported on both wide and narrow streams:
721	    <screen>date d(not_a_date_time);
722std::stringstream ss("2000-FEB-29");
723ss &gt;&gt; d; //Feb 29th, 2000
724std::wstringstream ws("2000-FEB-29");
725ws &gt;&gt; d; //Feb 29th, 2000</screen>
726	    Thanks to Bart Garst for this change.
727	  </entry>
728	</row>
729	<row>
730	  <entry>Bug Fix</entry>
731	  <entry> Fixed bug in duration_from_string() where a string formatted with
732                  less than full amount of fractional digits created an incorrect
733                  time_duration.  With microsecond resolution for time durations
734                  the string "1:01:01.010" created a time duration of
735                  01:01:01.000010 instead of 01:01:01.010000
736          </entry>
737	</row>
738	<row>
739	  <entry>Bug Fix</entry>
740	  <entry>Fixed the special value constructor for gregorian::date and posix_time::ptime
741                 when constructing with min_date_time or max_date_time.  The wrong value was
742                 constructed for these.
743          </entry>
744	</row>
745      </tbody>
746    </tgroup>
747  </informaltable>
748
749  <bridgehead renderas="sect3">Changes from Boost 1.30 to 1.31 (date_time 1.01 to 1.02)</bridgehead>
750  <informaltable frame="all">
751    <tgroup cols="2">
752      <thead>
753	<row>
754	  <entry>Type</entry>
755	  <entry>Description</entry>
756	</row>
757      </thead>
758      <tbody>
759	<row>
760	  <entry>Bug Fix</entry>
761	  <entry>Build configuration updated so dll, statically, and dynamically linkable library files are now produced with MSVC compilers. See <link linkend="date_time.buildinfo">Build/Compiler Information</link> for more details.</entry>
762	</row>
763	<row>
764	  <entry>Bug Fix</entry>
765	  <entry>Time_duration from_string is now correctly constructed from a negative value. (ie "-0:39:00.000") Code provided by Bart Garst.</entry>
766	</row>
767	<row>
768	  <entry>Bug Fix</entry>
769	  <entry>Fixed many MSVC compiler warnings when compiled with warning level 4.</entry>
770	</row>
771	<row>
772	  <entry>Feature</entry>
773	  <entry>Added prefix decrement operator (--) for date and time iterators. See <link linkend="date_time.posix_time.time_iterators">Time Iterators</link>  and <link linkend="date_time.gregorian.date_iterators">Date Iterators</link> for more details. Code provided by Bart Garst.</entry>
774	</row>
775	<row>
776	  <entry>Feature</entry>
777	  <entry>Special_values functionality added for date_duration, time_duration and time classes. Code provided by Bart Garst.</entry>
778	</row>
779	<row>
780	  <entry>Bug Fix</entry>
781	  <entry>Fixed time_duration_traits calculation bug which was causing time duration to be limited to 32bit range even when 64 bits were available. Thanks to Joe de Guzman for tracking this down.</entry>
782	</row>
783	<row>
784	  <entry>Bug Fix</entry>
785	  <entry>Provided additional operators for duration types (eg: date_duration, time_duration). This includes dividable by integer and fixes to allow +=, -= operators. Thanks to Bart Garst for writing this code. Also, the documentation of <link linkend="date_time.calculations">Calculations</link> has been improved.</entry>
786	</row>
787	<row>
788	  <entry>Bug Fix</entry>
789	  <entry>Added typedefs to boost::gregorian gregorian_types.hpp various date_generator function classes.</entry>
790	</row>
791	<row>
792	  <entry>Feature</entry>
793	  <entry>Added from_time_t function to convert time_t to a ptime.</entry>
794	</row>
795	<row>
796	  <entry>Feature</entry>
797	  <entry>Added a span function for combining periods. See <link linkend="date_time.gregorian.date_period">date period</link> and <link linkend="date_time.posix_time.time_period">time period</link> docs.</entry>
798	</row>
799	<row>
800	  <entry>Feature</entry>
801	  <entry>Added a function to time_duration to get the total number of seconds in a
802                 duration truncating any fractional seconds. In addition, other resolutions
803                 were added to allow for easy conversions. For example
804	    <screen>seconds(1).total_milliseconds() == 1000
805seconds(1).total_microseconds() == 1000000
806hours(1).total_milliseconds() == 3600*1000 //3600 sec/hour
807seconds(1).total_nanoseconds() == 1000000000</screen>
808
809           </entry>
810	</row>
811	<row>
812	  <entry>Feature</entry>
813	  <entry>Added output streaming operators for the <link linkend="date_time.gregorian.date_algorithms">date generator</link> classes - partial_date, first_kday_after, first_kday_before, etc. Thanks to Bart Garst for this work.</entry>
814	</row>
815	<row>
816	  <entry>Feature</entry>
817	  <entry>Added unary- operators for durations for reversing the sign of a time duration. For example:
818	    <screen>time_duration td(5,0,0); //5 hours
819td = -td; //-5 hours</screen>
820	  Thanks to Bart Garst for this work.</entry>
821	</row>
822	<row>
823	  <entry>Feature</entry>
824	  <entry>Added support for parsing strings with 'month names'. Thus creating a date object from string now accepts multiple formats ("2003-10-31","2003-Oct-31", and "2003-October-31"). Thus, date d = from_simple_string("2003-Feb-27") is now allowed. A bad month name string ( from_simple_string("2003-SomeBogusMonthName-27")) will cause a bad_month exception. On most compilers the string compare is case insensitive. Thanks to Bart Garst for this work.</entry>
825	</row>
826	<row>
827	  <entry>Feature</entry>
828	  <entry>In addition to support for month names or numbers, functions have been added to create date objects from multi-ordered date strings. Ex: "January-21-2002", "2002-Jan-21", and "21-Jan-2003". See <link linkend="date_time.gregorian.date_class">Date Class</link> for more details.</entry>
829	</row>
830	<row>
831	  <entry>Bug-Fix</entry><!-- leave '-' so table cell doesn't wrap -->
832	  <entry>Various documentation fixes. Thanks to Bart Garst for updates.</entry>
833	</row>
834      </tbody>
835    </tgroup>
836  </informaltable>
837
838  <bridgehead renderas="sect3">Changes from Boost 1.29 to 1.30 (date_time 1.00 to 1.01)</bridgehead>
839  <para>
840    Notice: The interface to the partial_date class (see <link linkend="date_time.gregorian.date_algorithms">date_algorithms</link>) was changed. The order of construction parameters was changed which will cause some code to fail execution. This change was made to facilitate more generic local time adjustment code. Thus instead of specifying partial_date pd(Dec,25) the code needs to be changed to partial_date pd(25, Dec);
841  </para>
842  <informaltable frame="all">
843    <tgroup cols="2">
844      <thead>
845	<row>
846	  <entry>Type</entry>
847	  <entry>Description</entry>
848	</row>
849      </thead>
850      <tbody>
851	<row>
852	  <entry>Bug Fix</entry>
853	  <entry>Added new experimental feature for Daylight Savings Time calculations. This allows traits based specification of dst rules.</entry>
854	</row>
855	<row>
856	  <entry>Feature</entry>
857	  <entry>Added new interfaces to calculate julian day and modified julian day to the gregorian date class. See <link linkend="date_time.gregorian.date_class">boost::gregorian::date</link>.</entry>
858	</row>
859	<row>
860	  <entry>Feature</entry>
861	  <entry>Add new interface to calculate iso 8601 week number for a date. See <link linkend="date_time.gregorian.date_class">boost::gregorian::date</link>.</entry>
862	</row>
863	<row>
864	  <entry>Feature</entry>
865	  <entry>Add an iso 8601 time date-time format (eg: YYYYMMDDTHHHMMSS) parsing function. See <link linkend="date_time.posix_time.ptime_class">Class ptime</link> for more information.</entry>
866	</row>
867	<row>
868	  <entry>Feature</entry>
869	  <entry> Added a length function to the period template so that both date_periods and time_periods will now support this function.</entry>
870	</row>
871	<row>
872	  <entry>Bug Fix</entry>
873	  <entry>Split Jamfiles so that libs/date_time/build/Jamfile only builds library and /libs/date_time/libs/test/Jamfile which runs tests.</entry>
874	</row>
875	<row>
876	  <entry>Bug Fix</entry>
877	  <entry>Fixed many minor documentation issues.</entry>
878	</row>
879	<row>
880	  <entry>Bug Fix</entry>
881	  <entry>Removed the DATE_TIME_INLINE macro which was causing link errors. This macro is no longer needed in projects using the library.</entry>
882	</row>
883	<row>
884	  <entry>Bug Fix</entry>
885	  <entry>Added missing typedef for year_iterator to gregorian_types.hpp</entry>
886	</row>
887	<row>
888	  <entry>Bug Fix</entry>
889	  <entry>Fixed problem with gregorian ostream operators that prevented the use of wide streams.</entry>
890	</row>
891	<row>
892	  <entry>Bug-Fix</entry><!-- leave '-' so table cell doesn't wrap -->
893	  <entry>Tighten error handling for dates so that date(2002, 2, 29) will throw a bad_day_of_month exception. Previously the date would be incorrectly constructed. Reported by sourceforge bug: 628054 among others.</entry>
894	</row>
895      </tbody>
896    </tgroup>
897  </informaltable>
898</section>
899