Compare commits

...

1100 Commits

Author SHA1 Message Date
Peter Dimov 6248d64ed9 Merge branch 'develop' 2026-06-01 01:52:20 +03:00
Andrey Semashev 6b387c4969 Remove dependencies on Boost.StaticAssert. (#250)
Boost.StaticAssert has been merged into Boost.Config, so remove
the dependency.
2026-02-06 03:26:58 +02:00
James E. King III 69c45b7a2b Update README 2025-07-07 06:39:45 -04:00
James E. King III 19ffa6232d Implement a reusable GHA workflow with configuration options. 2025-07-06 22:04:23 -04:00
Jeff Garland 363e04d7ec Merge pull request #242 from jeking3/coverity-255065
issue-204: period::intersects incorrect for empty periods
2025-07-06 18:06:39 -07:00
James E. King III 64c1df1e3e issue-204: period::intersects incorrect for empty periods
Originally identified by Coverity Scan.  Zero length periods like
[3, 3) cannot intersect with anything.  Invalid periods like
[5, 4) also cannot intersect with anything.  In both cases the
unit tests are wrong, and fixing them reveals the implementation
is not canonical for half-open sane intervals.
2025-07-06 14:56:23 -04:00
René Ferdinand Rivera Morell 645574e5df Add support for modular build structure. (#239)
* Make the library modular usable.

* Switch to library requirements instead of source. As source puts extra source in install targets.

* Add missing NO_LIB usage requirements.

* Add requires-b2 check to top-level build file.

* Bump B2 require to 5.2

* Update copyright dates.

* Move inter-lib dependencies to a project variable and into the build targets.

* Adjust doc build to avoid boost-root references.

* Update build deps.

* Rework GHA to use containers for the ubuntu that are god or going away.

* Remove obsolete package installs.

* Need another package?

* Some deepndencies are now C++11 only. Hence date_time is now also C++11 only.

* Switch macOS test to use the latest version.

* Remove not-needed software-properties-common package.

* Remove setup gcc toolchain step.

* Install some missing compilers.

* Maybe the gcc builds for the specific ubuntu versions rea broken. Switch to something newer.
2025-06-27 02:30:25 +03:00
Jeff Garland 85e637cb32 minor date-time fixes for 1.81 release (#219)
* fix typo in time_period docs (#212)

Co-authored-by: Quinn O'Connor <qoconnor@fastenal.com>

* Fix constexpr of gregorian::date::date(special_values) to improve perf (#214)

GCC up to at least 10.2 fail to resolve
gregorian::date::date(special_values) as constexpr function due to
assignment to *this within the constructor. Refactoring constructor to
initialize the instance once leads to large performance improvement.

* Avoid using likely function as multiple projects define a likely macro (#216)

* Iso doc fixes (#215)

* to_iso_*string() use "." as fractional separator

The fractional separator for the various to_iso_* methods
is "." not "," (per to_iso_string_type() implementation).
Fix the documentation to match the implementation.

* use "ISO 8601" not "iso" in documentation

The standard is "ISO 8601", so use that instead
of just "iso" or "ISO" in comments and documentation.

* fractional seconds only included if non-zero (#110)

Consistently document that the fractional seconds
are only included if non-zero.

Use "where fffffffff" not "were fff".

* Fix ccache saving on cache hit (#211)

See boostorg/boost-ci#166

* chore: bump macos runner version (#213)

GitHub Action is sunsetting the macOS 10.15 Actions runner. It will stop working intermittently until being completely removed by 2022-8-30: https://github.blog/changelog/2022-07-20-github-actions-the-macos-10-15-actions-runner-image-is-being-deprecated-and-will-be-removed-by-8-30-22

Co-authored-by: Quinnsicle <qtoconnor@gmail.com>
Co-authored-by: Quinn O'Connor <qoconnor@fastenal.com>
Co-authored-by: Povilas Kanapickas <povilas@radix.lt>
Co-authored-by: Antony Polukhin <antoshkka@gmail.com>
Co-authored-by: Luke Mewburn <luke@mewburn.net>
Co-authored-by: Alexander Grund <Flamefire@users.noreply.github.com>
Co-authored-by: Baoshuo Ren <i@baoshuo.ren>
2022-10-31 09:22:31 -07:00
Baoshuo Ren 39714907b7 chore: bump macos runner version (#213)
GitHub Action is sunsetting the macOS 10.15 Actions runner. It will stop working intermittently until being completely removed by 2022-8-30: https://github.blog/changelog/2022-07-20-github-actions-the-macos-10-15-actions-runner-image-is-being-deprecated-and-will-be-removed-by-8-30-22
2022-09-20 15:13:04 -07:00
Alexander Grund abef5a147a Fix ccache saving on cache hit (#211)
See boostorg/boost-ci#166
2022-09-20 15:12:17 -07:00
Luke Mewburn ddcfd00391 Iso doc fixes (#215)
* to_iso_*string() use "." as fractional separator

The fractional separator for the various to_iso_* methods
is "." not "," (per to_iso_string_type() implementation).
Fix the documentation to match the implementation.

* use "ISO 8601" not "iso" in documentation

The standard is "ISO 8601", so use that instead
of just "iso" or "ISO" in comments and documentation.

* fractional seconds only included if non-zero (#110)

Consistently document that the fractional seconds
are only included if non-zero.

Use "where fffffffff" not "were fff".
2022-09-20 15:10:38 -07:00
Antony Polukhin c02d713cef Avoid using likely function as multiple projects define a likely macro (#216) 2022-09-08 04:01:15 -07:00
Povilas Kanapickas b81ed2874f Fix constexpr of gregorian::date::date(special_values) to improve perf (#214)
GCC up to at least 10.2 fail to resolve
gregorian::date::date(special_values) as constexpr function due to
assignment to *this within the constructor. Refactoring constructor to
initialize the instance once leads to large performance improvement.
2022-08-01 03:34:36 -07:00
Quinnsicle 0aed920bfb fix typo in time_period docs (#212)
Co-authored-by: Quinn O'Connor <qoconnor@fastenal.com>
2022-07-02 10:41:51 -07:00
Raphaël Duhen f972dc9656 Fix minor typo (#210)
Thanks!
2022-04-29 09:33:12 -07:00
James E. King III 7677fdce5a Fix appveyor links in readme 2022-04-28 08:08:09 -04:00
James E. King III 8729945096 remove drone config 2022-04-24 21:00:53 -04:00
Owen Rudge cbad9bcec9 Add from_time_t test for 64-bit time_t 2022-03-01 11:15:22 -05:00
Owen Rudge 64fe6586fe Fix from_time_t Y2K38 bug on LLP64 platforms 2022-03-01 11:15:22 -05:00
James E. King III a20a5c8b7c Merge branch 'master' into develop 2022-02-20 06:58:55 -05:00
timmaraju ff77162265 fix signed to unsigned conversion warning (#179)
MSVC 19.28.29336.0 throws the following warning when
boost::date_time::gregorian_date is called.

warning C4365: 'initializing': conversion from 'int' to 'unsigned long', signed/unsigned mismatch
warning C4365: const boost::posix_time::ptime Since1970(boost::gregorian::date(1970U, 1U, 1U));
warning C4365:                                                                                ^
<path>\include\boost\date_time\date.hpp(72,35): message : while evaluating constexpr function 'boost::date_time::gregorian_calendar_base<boost::gregorian::greg_year_month_day,unsigned int>::day_number'
<path>\include\boost\date_time\date.hpp(72,35): message :       : days_(calendar::day_number(ymd_type(y, m, d)))

Co-authored-by: timmaraju <keerthi.timmaraju@teamviewer.com>
2022-02-12 05:53:38 -07:00
James E. King III 0be5d92c90 refresh ci, codecov, readme
- align to current boost-ci practice
- deal with VERY slow test runner in microsec_time_clock test
- disable sanitize tests - too many issues in boost serialization right now
- omit unit tests from coverage
2022-02-11 21:14:28 -05:00
Jeff Garland 33dc6136f1 misc fixes and updates for date-time boost 1.77 (#196)
* Change greg_month and greg_weekday to be not marked as exported/imported (#146)

* Changed greg_month and greg_weekday to be not marked as exported/imported.

Both greg_month and greg_weekday classes are implemented completely in headers,
so they need not be marked with BOOST_DATE_TIME_DECL. For consistency with other
similar classes, they are now marked with BOOST_SYMBOL_VISIBLE.

This should fix linking errors on Windows/MSVC, where all members of greg_month
and greg_weekday classes remain unresolved as they are expected to be
implemented in a shared library.

* Enabled shared and static linking in AppVeyor CI.

* fix new msvc warning in date_parsing with Warn4 - issue #148

* Cast month numbers to the correct type in map init (#152)

Since the map contains unsigned short for month numbers, it is more correct to explicitly cast constants to that type rather than short.

* Changes for Embarcadero C++ clang-based compilers, targeting Boost 1.74 (#150)

* Change __BORLANDC__ to BOOST_BORLANDC, which is defined in Boost config for the Embarcadero non-clang-based compilers.

* Change BOOST_BORLANDC back to __BORLANDC__ for non-posix functionality.

* Include the header file.

* Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero.

* Revert "Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero."

This reverts commit 88e45e951b.

* Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero.

* Remove separate outside of template class friend functions.

* Define all the friend functions outside the class to conform with the necessity of Embarcadero C++ clang-based compilers that need the friend functions in exported/imported classes to be defined outside the class. This is an Embarcadero C++ clang-based compiler bug which i reported to Embarcadero.

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* tune: add initial cmake configuration (#151)

* tune: add initial cmake configuration

* bugfix: Incorrect library alias

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* Use BOOST_OVERRIDE to fix GCC -Wsuggest-override and Clang-tidy modernize-use-override warnings. (#155)

Also fix Clang -Wextra-semi-stmt and Clang-tidy readability-container-size-empty warnings.
Alphabetical order of STL headers.
Fix some misspellings.

Co-authored-by: Eugene Zelenko <eugene@diakopto.com>

* Break DateTime <-> Serialization circular dependency (#154)

Breaks DateTime -> Serialization -> Spirit -> Thread -> DateTime chain.

The Serialization documentation seems to be explicitly allow this:
https://www.boost.org/doc/libs/1_73_0/libs/serialization/doc/traits.html#version
https://www.boost.org/doc/libs/1_73_0/libs/serialization/doc/serialization.html#splitting

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* Fix clang 10 C++17 warnings about deprecated implicit assignment operators. (#158)

C++17 deprecates implicit generation of assignment operator in presence of
explicitly declared copy constructor. In future standards this behavior may
be removed.

In the affected Boost.DateTime classes, the explicitly defined copy
constructors are functionally equivalent to those would be generated
implicitly, so we can just remove them. The additional benefit is that the
implicitly generated ones will have constexpr and noexcept specifications,
and will also allow implicit move constructors and assignment operators.

* Suppress MSVC CRT deprecations on Clang (#160)

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* Add BOOST_CXX14_CONSTEXPR to CV assign() (#161)

Without this change the BOOST_CXX14_CONSTEXPR on the constructors has no
effect, as they invoke assign()

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* add constexpr tests to date, ptime, constrained_value (#162)

* merge some doc changes for constexpr fix (#163)

* add constexpr tests to date, ptime, constrained_value

* add some docs for 1.74 release

* const-qualify retrieval and comparison methods of time_itr and date_itr_base (#170)

* [skip ci] Add "cxxstd" json field. The "cxxstd" json field is being added to each Boost library's meta json information for libraries in order to specify the minumum C++ standard compilation level. The value of this field matches one of the values for 'cxxstd' in Boost.Build. The purpose of doing this is to provide information for the Boost website documentation for each library which will specify the minimum C++ standard compilation that an end-user must employ in order to use the particular library. This will aid end-users who want to know if they can successfully use a Boost library based on their C++ compiler's  compilation level, without having to search the library's documentation to find this out. (#178)

* add drone config [ci skip] (#180)

* Add GitHub Actions config [ci skip] (#182)

* Update README.md

* Update README.md

* Update README.md

fixup comments on readme to match header_only status

* fix #189 for autolink -- driveby change to remove gcc2.95 support (#191)

* ptime from iso error string error with date only (#192)

* fix #189 for autolink -- driveby change to remove gcc2.95 support

* fix #187 date-only case to avoid string exception, beef up error case test

* ci updates (#194)

* fix #189 for autolink -- driveby change to remove gcc2.95 support

* fix #187 date-only case to avoid string exception, beef up error case test

* attempted fix for #193 - ci issues

* attempted fix for #193 - ci issues try 2

* attempted fix for #193 - ci issues try 3

* attempted fix for #193 - ci issues try 4

* attempted fix for #193 - ci issues try 4a

* attempted fix for #193 - ci issues try 5

* attempted fix for #193 - ci issues try 6

* attempted fix for #193 - ci issues try 7 - rm clang 3.8

* Regenerate CMakeLists.txt

* Add stub source file

Co-authored-by: Andrey Semashev <Lastique@users.noreply.github.com>
Co-authored-by: Edward Diener <eldlistmailingz@tropicsoft.com>
Co-authored-by: tapika <tapika@yahoo.com>
Co-authored-by: EugeneZelenko <eugene.zelenko@gmail.com>
Co-authored-by: Eugene Zelenko <eugene@diakopto.com>
Co-authored-by: Nikita Kniazev <nok.raven@gmail.com>
Co-authored-by: Roger Orr <rogero@howzatt.co.uk>
Co-authored-by: klaus triendl <klaus@triendl.eu>
Co-authored-by: Sam Darwin <samuel.d.darwin@gmail.com>
Co-authored-by: Peter Dimov <pdimov@gmail.com>
2021-06-28 08:14:45 -07:00
Jeff Garland 7156392706 Merge branch 'master' into develop 2021-06-28 07:55:17 -07:00
Peter Dimov 561ccb878d Add stub source file 2021-06-08 21:52:12 +03:00
Peter Dimov 3feaece6d2 Regenerate CMakeLists.txt 2021-06-08 21:51:59 +03:00
Peter Dimov 9970590094 Add stub source file 2021-05-28 01:27:21 +03:00
Peter Dimov 4b97311ca7 Regenerate CMakeLists.txt 2021-05-28 01:26:14 +03:00
Jeff Garland a94bcf288d ci updates (#194)
* fix #189 for autolink -- driveby change to remove gcc2.95 support

* fix #187 date-only case to avoid string exception, beef up error case test

* attempted fix for #193 - ci issues

* attempted fix for #193 - ci issues try 2

* attempted fix for #193 - ci issues try 3

* attempted fix for #193 - ci issues try 4

* attempted fix for #193 - ci issues try 4a

* attempted fix for #193 - ci issues try 5

* attempted fix for #193 - ci issues try 6

* attempted fix for #193 - ci issues try 7 - rm clang 3.8
2021-05-02 17:27:18 -07:00
Jeff Garland 8011fdf0bc ptime from iso error string error with date only (#192)
* fix #189 for autolink -- driveby change to remove gcc2.95 support

* fix #187 date-only case to avoid string exception, beef up error case test
2021-05-02 08:57:36 -07:00
Jeff Garland 15be01a02d fix #189 for autolink -- driveby change to remove gcc2.95 support (#191) 2021-04-30 11:51:48 -07:00
Jeff Garland acbee0dc6a Update README.md
fixup comments on readme to match header_only status
2021-03-23 08:28:14 -07:00
Jeff Garland aa9c5dfd48 Update README.md 2021-03-23 08:26:07 -07:00
Jeff Garland 47de78e4fc Update README.md 2021-03-23 08:25:32 -07:00
Jeff Garland 79ca1aa0a7 Merge minor date-time updates for boost 1.76 (#183)
* Change greg_month and greg_weekday to be not marked as exported/imported (#146)

* Changed greg_month and greg_weekday to be not marked as exported/imported.

Both greg_month and greg_weekday classes are implemented completely in headers,
so they need not be marked with BOOST_DATE_TIME_DECL. For consistency with other
similar classes, they are now marked with BOOST_SYMBOL_VISIBLE.

This should fix linking errors on Windows/MSVC, where all members of greg_month
and greg_weekday classes remain unresolved as they are expected to be
implemented in a shared library.

* Enabled shared and static linking in AppVeyor CI.

* fix new msvc warning in date_parsing with Warn4 - issue #148

* Cast month numbers to the correct type in map init (#152)

Since the map contains unsigned short for month numbers, it is more correct to explicitly cast constants to that type rather than short.

* Changes for Embarcadero C++ clang-based compilers, targeting Boost 1.74 (#150)

* Change __BORLANDC__ to BOOST_BORLANDC, which is defined in Boost config for the Embarcadero non-clang-based compilers.

* Change BOOST_BORLANDC back to __BORLANDC__ for non-posix functionality.

* Include the header file.

* Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero.

* Revert "Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero."

This reverts commit 88e45e951b.

* Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero.

* Remove separate outside of template class friend functions.

* Define all the friend functions outside the class to conform with the necessity of Embarcadero C++ clang-based compilers that need the friend functions in exported/imported classes to be defined outside the class. This is an Embarcadero C++ clang-based compiler bug which i reported to Embarcadero.

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* tune: add initial cmake configuration (#151)

* tune: add initial cmake configuration

* bugfix: Incorrect library alias

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* Use BOOST_OVERRIDE to fix GCC -Wsuggest-override and Clang-tidy modernize-use-override warnings. (#155)

Also fix Clang -Wextra-semi-stmt and Clang-tidy readability-container-size-empty warnings.
Alphabetical order of STL headers.
Fix some misspellings.

Co-authored-by: Eugene Zelenko <eugene@diakopto.com>

* Break DateTime <-> Serialization circular dependency (#154)

Breaks DateTime -> Serialization -> Spirit -> Thread -> DateTime chain.

The Serialization documentation seems to be explicitly allow this:
https://www.boost.org/doc/libs/1_73_0/libs/serialization/doc/traits.html#version
https://www.boost.org/doc/libs/1_73_0/libs/serialization/doc/serialization.html#splitting

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* Fix clang 10 C++17 warnings about deprecated implicit assignment operators. (#158)

C++17 deprecates implicit generation of assignment operator in presence of
explicitly declared copy constructor. In future standards this behavior may
be removed.

In the affected Boost.DateTime classes, the explicitly defined copy
constructors are functionally equivalent to those would be generated
implicitly, so we can just remove them. The additional benefit is that the
implicitly generated ones will have constexpr and noexcept specifications,
and will also allow implicit move constructors and assignment operators.

* Suppress MSVC CRT deprecations on Clang (#160)

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* Add BOOST_CXX14_CONSTEXPR to CV assign() (#161)

Without this change the BOOST_CXX14_CONSTEXPR on the constructors has no
effect, as they invoke assign()

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* add constexpr tests to date, ptime, constrained_value (#162)

* merge some doc changes for constexpr fix (#163)

* add constexpr tests to date, ptime, constrained_value

* add some docs for 1.74 release

* const-qualify retrieval and comparison methods of time_itr and date_itr_base (#170)

* [skip ci] Add "cxxstd" json field. The "cxxstd" json field is being added to each Boost library's meta json information for libraries in order to specify the minumum C++ standard compilation level. The value of this field matches one of the values for 'cxxstd' in Boost.Build. The purpose of doing this is to provide information for the Boost website documentation for each library which will specify the minimum C++ standard compilation that an end-user must employ in order to use the particular library. This will aid end-users who want to know if they can successfully use a Boost library based on their C++ compiler's  compilation level, without having to search the library's documentation to find this out. (#178)

* add drone config [ci skip] (#180)

* Add GitHub Actions config [ci skip] (#182)

Co-authored-by: Andrey Semashev <Lastique@users.noreply.github.com>
Co-authored-by: Edward Diener <eldlistmailingz@tropicsoft.com>
Co-authored-by: tapika <tapika@yahoo.com>
Co-authored-by: EugeneZelenko <eugene.zelenko@gmail.com>
Co-authored-by: Eugene Zelenko <eugene@diakopto.com>
Co-authored-by: Nikita Kniazev <nok.raven@gmail.com>
Co-authored-by: Roger Orr <rogero@howzatt.co.uk>
Co-authored-by: klaus triendl <klaus@triendl.eu>
Co-authored-by: Sam Darwin <samuel.d.darwin@gmail.com>
2021-03-05 08:49:04 -07:00
Sam Darwin ccc21804bd Add GitHub Actions config [ci skip] (#182) 2021-03-04 12:59:38 -07:00
Sam Darwin 31c983b256 add drone config [ci skip] (#180) 2021-01-26 16:17:52 -07:00
Edward Diener f92b2b3bfc [skip ci] Add "cxxstd" json field. The "cxxstd" json field is being added to each Boost library's meta json information for libraries in order to specify the minumum C++ standard compilation level. The value of this field matches one of the values for 'cxxstd' in Boost.Build. The purpose of doing this is to provide information for the Boost website documentation for each library which will specify the minimum C++ standard compilation that an end-user must employ in order to use the particular library. This will aid end-users who want to know if they can successfully use a Boost library based on their C++ compiler's compilation level, without having to search the library's documentation to find this out. (#178) 2021-01-19 17:59:35 -07:00
klaus triendl b43d605ad2 const-qualify retrieval and comparison methods of time_itr and date_itr_base (#170) 2020-09-03 16:19:53 -07:00
Jeff Garland fa46e55ca8 final merges for 1.74 (#164)
* Change greg_month and greg_weekday to be not marked as exported/imported (#146)

* Changed greg_month and greg_weekday to be not marked as exported/imported.

Both greg_month and greg_weekday classes are implemented completely in headers,
so they need not be marked with BOOST_DATE_TIME_DECL. For consistency with other
similar classes, they are now marked with BOOST_SYMBOL_VISIBLE.

This should fix linking errors on Windows/MSVC, where all members of greg_month
and greg_weekday classes remain unresolved as they are expected to be
implemented in a shared library.

* Enabled shared and static linking in AppVeyor CI.

* fix new msvc warning in date_parsing with Warn4 - issue #148

* Cast month numbers to the correct type in map init (#152)

Since the map contains unsigned short for month numbers, it is more correct to explicitly cast constants to that type rather than short.

* Changes for Embarcadero C++ clang-based compilers, targeting Boost 1.74 (#150)

* Change __BORLANDC__ to BOOST_BORLANDC, which is defined in Boost config for the Embarcadero non-clang-based compilers.

* Change BOOST_BORLANDC back to __BORLANDC__ for non-posix functionality.

* Include the header file.

* Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero.

* Revert "Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero."

This reverts commit 88e45e951b.

* Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero.

* Remove separate outside of template class friend functions.

* Define all the friend functions outside the class to conform with the necessity of Embarcadero C++ clang-based compilers that need the friend functions in exported/imported classes to be defined outside the class. This is an Embarcadero C++ clang-based compiler bug which i reported to Embarcadero.

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* tune: add initial cmake configuration (#151)

* tune: add initial cmake configuration

* bugfix: Incorrect library alias

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* Use BOOST_OVERRIDE to fix GCC -Wsuggest-override and Clang-tidy modernize-use-override warnings. (#155)

Also fix Clang -Wextra-semi-stmt and Clang-tidy readability-container-size-empty warnings.
Alphabetical order of STL headers.
Fix some misspellings.

Co-authored-by: Eugene Zelenko <eugene@diakopto.com>

* Break DateTime <-> Serialization circular dependency (#154)

Breaks DateTime -> Serialization -> Spirit -> Thread -> DateTime chain.

The Serialization documentation seems to be explicitly allow this:
https://www.boost.org/doc/libs/1_73_0/libs/serialization/doc/traits.html#version
https://www.boost.org/doc/libs/1_73_0/libs/serialization/doc/serialization.html#splitting

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* Fix clang 10 C++17 warnings about deprecated implicit assignment operators. (#158)

C++17 deprecates implicit generation of assignment operator in presence of
explicitly declared copy constructor. In future standards this behavior may
be removed.

In the affected Boost.DateTime classes, the explicitly defined copy
constructors are functionally equivalent to those would be generated
implicitly, so we can just remove them. The additional benefit is that the
implicitly generated ones will have constexpr and noexcept specifications,
and will also allow implicit move constructors and assignment operators.

* Suppress MSVC CRT deprecations on Clang (#160)

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* Add BOOST_CXX14_CONSTEXPR to CV assign() (#161)

Without this change the BOOST_CXX14_CONSTEXPR on the constructors has no
effect, as they invoke assign()

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* add constexpr tests to date, ptime, constrained_value (#162)

* merge some doc changes for constexpr fix (#163)

* add constexpr tests to date, ptime, constrained_value

* add some docs for 1.74 release

Co-authored-by: Andrey Semashev <Lastique@users.noreply.github.com>
Co-authored-by: Edward Diener <eldlistmailingz@tropicsoft.com>
Co-authored-by: tapika <tapika@yahoo.com>
Co-authored-by: EugeneZelenko <eugene.zelenko@gmail.com>
Co-authored-by: Eugene Zelenko <eugene@diakopto.com>
Co-authored-by: Nikita Kniazev <nok.raven@gmail.com>
Co-authored-by: Roger Orr <rogero@howzatt.co.uk>
2020-07-16 09:01:11 -07:00
Jeff Garland 61677ba228 merge some doc changes for constexpr fix (#163)
* add constexpr tests to date, ptime, constrained_value

* add some docs for 1.74 release
2020-07-13 08:12:09 -07:00
Jeff Garland 30795441e4 add constexpr tests to date, ptime, constrained_value (#162) 2020-07-09 08:06:58 -07:00
Roger Orr 77495803c1 Add BOOST_CXX14_CONSTEXPR to CV assign() (#161)
Without this change the BOOST_CXX14_CONSTEXPR on the constructors has no
effect, as they invoke assign()

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>
2020-07-08 08:41:24 -07:00
Nikita Kniazev 247424d08d Suppress MSVC CRT deprecations on Clang (#160)
Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>
2020-07-08 07:56:10 -07:00
Jeff Garland ab066e3601 merge date_time maintenance changes for boost 1.74 (#159)
* Change greg_month and greg_weekday to be not marked as exported/imported (#146)

* Changed greg_month and greg_weekday to be not marked as exported/imported.

Both greg_month and greg_weekday classes are implemented completely in headers,
so they need not be marked with BOOST_DATE_TIME_DECL. For consistency with other
similar classes, they are now marked with BOOST_SYMBOL_VISIBLE.

This should fix linking errors on Windows/MSVC, where all members of greg_month
and greg_weekday classes remain unresolved as they are expected to be
implemented in a shared library.

* Enabled shared and static linking in AppVeyor CI.

* fix new msvc warning in date_parsing with Warn4 - issue #148

* Cast month numbers to the correct type in map init (#152)

Since the map contains unsigned short for month numbers, it is more correct to explicitly cast constants to that type rather than short.

* Changes for Embarcadero C++ clang-based compilers, targeting Boost 1.74 (#150)

* Change __BORLANDC__ to BOOST_BORLANDC, which is defined in Boost config for the Embarcadero non-clang-based compilers.

* Change BOOST_BORLANDC back to __BORLANDC__ for non-posix functionality.

* Include the header file.

* Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero.

* Revert "Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero."

This reverts commit 88e45e951b.

* Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero.

* Remove separate outside of template class friend functions.

* Define all the friend functions outside the class to conform with the necessity of Embarcadero C++ clang-based compilers that need the friend functions in exported/imported classes to be defined outside the class. This is an Embarcadero C++ clang-based compiler bug which i reported to Embarcadero.

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* tune: add initial cmake configuration (#151)

* tune: add initial cmake configuration

* bugfix: Incorrect library alias

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* Use BOOST_OVERRIDE to fix GCC -Wsuggest-override and Clang-tidy modernize-use-override warnings. (#155)

Also fix Clang -Wextra-semi-stmt and Clang-tidy readability-container-size-empty warnings.
Alphabetical order of STL headers.
Fix some misspellings.

Co-authored-by: Eugene Zelenko <eugene@diakopto.com>

* Break DateTime <-> Serialization circular dependency (#154)

Breaks DateTime -> Serialization -> Spirit -> Thread -> DateTime chain.

The Serialization documentation seems to be explicitly allow this:
https://www.boost.org/doc/libs/1_73_0/libs/serialization/doc/traits.html#version
https://www.boost.org/doc/libs/1_73_0/libs/serialization/doc/serialization.html#splitting

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>

* Fix clang 10 C++17 warnings about deprecated implicit assignment operators. (#158)

C++17 deprecates implicit generation of assignment operator in presence of
explicitly declared copy constructor. In future standards this behavior may
be removed.

In the affected Boost.DateTime classes, the explicitly defined copy
constructors are functionally equivalent to those would be generated
implicitly, so we can just remove them. The additional benefit is that the
implicitly generated ones will have constexpr and noexcept specifications,
and will also allow implicit move constructors and assignment operators.

Co-authored-by: Andrey Semashev <Lastique@users.noreply.github.com>
Co-authored-by: Edward Diener <eldlistmailingz@tropicsoft.com>
Co-authored-by: tapika <tapika@yahoo.com>
Co-authored-by: EugeneZelenko <eugene.zelenko@gmail.com>
Co-authored-by: Eugene Zelenko <eugene@diakopto.com>
Co-authored-by: Nikita Kniazev <nok.raven@gmail.com>
2020-06-25 16:45:21 -07:00
Andrey Semashev 76852e4aab Fix clang 10 C++17 warnings about deprecated implicit assignment operators. (#158)
C++17 deprecates implicit generation of assignment operator in presence of
explicitly declared copy constructor. In future standards this behavior may
be removed.

In the affected Boost.DateTime classes, the explicitly defined copy
constructors are functionally equivalent to those would be generated
implicitly, so we can just remove them. The additional benefit is that the
implicitly generated ones will have constexpr and noexcept specifications,
and will also allow implicit move constructors and assignment operators.
2020-06-23 13:28:16 -07:00
Nikita Kniazev 356c5c2600 Break DateTime <-> Serialization circular dependency (#154)
Breaks DateTime -> Serialization -> Spirit -> Thread -> DateTime chain.

The Serialization documentation seems to be explicitly allow this:
https://www.boost.org/doc/libs/1_73_0/libs/serialization/doc/traits.html#version
https://www.boost.org/doc/libs/1_73_0/libs/serialization/doc/serialization.html#splitting

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>
2020-05-25 09:39:21 -07:00
EugeneZelenko 3d55c15cbb Use BOOST_OVERRIDE to fix GCC -Wsuggest-override and Clang-tidy modernize-use-override warnings. (#155)
Also fix Clang -Wextra-semi-stmt and Clang-tidy readability-container-size-empty warnings.
Alphabetical order of STL headers.
Fix some misspellings.

Co-authored-by: Eugene Zelenko <eugene@diakopto.com>
2020-05-23 07:19:59 -07:00
tapika d77ee59bc2 tune: add initial cmake configuration (#151)
* tune: add initial cmake configuration

* bugfix: Incorrect library alias

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>
2020-05-18 13:59:29 -07:00
Edward Diener 5093074e0e Changes for Embarcadero C++ clang-based compilers, targeting Boost 1.74 (#150)
* Change __BORLANDC__ to BOOST_BORLANDC, which is defined in Boost config for the Embarcadero non-clang-based compilers.

* Change BOOST_BORLANDC back to __BORLANDC__ for non-posix functionality.

* Include the header file.

* Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero.

* Revert "Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero."

This reverts commit 88e45e951b.

* Inline friend function definitions for exported/imported classes must become declarations and inline definitions outside the class for Embarcadero C++ clang-based compilers. This bug has been reported to Embarcadero.

* Remove separate outside of template class friend functions.

* Define all the friend functions outside the class to conform with the necessity of Embarcadero C++ clang-based compilers that need the friend functions in exported/imported classes to be defined outside the class. This is an Embarcadero C++ clang-based compiler bug which i reported to Embarcadero.

Co-authored-by: Jeff Garland <jeff@crystalclearsoftware.com>
2020-05-04 09:09:57 -07:00
Andrey Semashev ecf042f538 Cast month numbers to the correct type in map init (#152)
Since the map contains unsigned short for month numbers, it is more correct to explicitly cast constants to that type rather than short.
2020-05-03 07:52:25 -07:00
JeffGarland d0b3c1da88 fix new msvc warning in date_parsing with Warn4 - issue #148 2020-04-10 06:27:11 -07:00
Jeff Garland b03272650e Change greg_month and greg_weekday to be not marked as exported/imported (#146) (#147)
* Changed greg_month and greg_weekday to be not marked as exported/imported.

Both greg_month and greg_weekday classes are implemented completely in headers,
so they need not be marked with BOOST_DATE_TIME_DECL. For consistency with other
similar classes, they are now marked with BOOST_SYMBOL_VISIBLE.

This should fix linking errors on Windows/MSVC, where all members of greg_month
and greg_weekday classes remain unresolved as they are expected to be
implemented in a shared library.

* Enabled shared and static linking in AppVeyor CI.

Co-authored-by: Andrey Semashev <Lastique@users.noreply.github.com>
2020-04-06 10:02:51 -07:00
Andrey Semashev e9a9ce3e35 Change greg_month and greg_weekday to be not marked as exported/imported (#146)
* Changed greg_month and greg_weekday to be not marked as exported/imported.

Both greg_month and greg_weekday classes are implemented completely in headers,
so they need not be marked with BOOST_DATE_TIME_DECL. For consistency with other
similar classes, they are now marked with BOOST_SYMBOL_VISIBLE.

This should fix linking errors on Windows/MSVC, where all members of greg_month
and greg_weekday classes remain unresolved as they are expected to be
implemented in a shared library.

* Enabled shared and static linking in AppVeyor CI.
2020-04-06 08:55:36 -07:00
JeffGarland 0c1d8fddd8 fix merge conflicts to master from develop for boost 1.73 2020-04-05 15:27:12 -07:00
Jeff Garland ad3239b722 date_time documentation updates for release 1.73 (#128)
* change gettimeofday to be clearer - issue #127

* clarify date_number docs - github issue #125

* add docs for from_iso_extended_string function - issue #116

* update documentation for 1.73 release - changes.xml
2020-04-05 14:14:40 -07:00
Andrey Semashev d335a54e9f Add missing includes and fix special_value_from_string definition (#144)
* Added a test generator for whether all public headers are self-contained.

The generator creates a compile test for every public header, unless
BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS environment variable
is set to 1.

* Only enable self-contained header tests on a few jobs.

There is no point in performing self-contained header tests on every compiler
configuration, so running them only on some saves CI time.

* Make public headers self-contained.

This commit:

- Adds missing includes.
- Adjusts gregorian namespace qualification in a few places to use use
  equivalent symbols from date_time and not have to include gregorian
  headers.
- Converts tabs to spaces and trims trailing spaces.

This makes the self-contained header tests pass on Linux.

* Move special_value_from_string definition to parsers.hpp.

This resolves different attributes applied to the function definition
in parsers.hpp and greg_month.hpp. The function is now inline and defined
in parsers.hpp.

Also, the commit converts tabs to spaces and trims trailing spaces.

Fixes https://github.com/boostorg/date_time/issues/143.

* Convert tabs to spaces and trim trailing spaces.
2020-04-05 07:27:27 -07:00
Jeff Garland cb3bd50b90 make date-time all inline, additional constexpr fixes, clang 2a fix for boost 1.73 (#142)
* pull request to make date-time all inline (#135)

* remove legacy to_simple_string and prefer streaming in test code

* driveby fix to clean up self-assign compiler warnings in test code

* driveby fix to clean up unused variable compiler warnings in test code

* another update for issue #123 (constexpr) to allow time_duration constexpr to work

* final updates to make date_time free of library - issue #134

* add stub library for backward compatibility (#137)

* remove legacy to_simple_string and prefer streaming in test code

* driveby fix to clean up self-assign compiler warnings in test code

* driveby fix to clean up unused variable compiler warnings in test code

* another update for issue #123 (constexpr) to allow time_duration constexpr to work

* final updates to make date_time free of library - issue #134

* make a stub library for backward compatibility of libs that link date_time library

* suppressed const qualifier on function return type (#138)

* suppressed const qualifier on function return type

As warned in https://www.boost.org/development/tests/develop/output/teeks99-dkr-dg4-6-warn-date_time-gcc-4-6~c++0x~warn-warnings.html#hours_special_value
```../boost/date_time/gregorian/greg_weekday.hpp:52:41: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
../boost/date_time/gregorian/greg_weekday.hpp:61:40: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]```

* trivial commit to trigger CI

* fix c++2a ambiguity on clang10 with operator== issue #132 (#140)

Co-authored-by: joaquintides <joaquin.lopezmunoz@gmail.com>
2020-03-25 05:38:03 -07:00
Jeff Garland 4a46476358 fix c++2a ambiguity on clang10 with operator== issue #132 (#140) 2020-03-22 20:05:09 -07:00
joaquintides 44618f1632 suppressed const qualifier on function return type (#138)
* suppressed const qualifier on function return type

As warned in https://www.boost.org/development/tests/develop/output/teeks99-dkr-dg4-6-warn-date_time-gcc-4-6~c++0x~warn-warnings.html#hours_special_value
```../boost/date_time/gregorian/greg_weekday.hpp:52:41: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
../boost/date_time/gregorian/greg_weekday.hpp:61:40: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]```

* trivial commit to trigger CI
2020-03-19 08:16:47 -07:00
Jeff Garland bbac2178ed add stub library for backward compatibility (#137)
* remove legacy to_simple_string and prefer streaming in test code

* driveby fix to clean up self-assign compiler warnings in test code

* driveby fix to clean up unused variable compiler warnings in test code

* another update for issue #123 (constexpr) to allow time_duration constexpr to work

* final updates to make date_time free of library - issue #134

* make a stub library for backward compatibility of libs that link date_time library
2020-03-15 21:03:59 -07:00
Jeff Garland d8c7a59ed9 pull request to make date-time all inline (#135)
* remove legacy to_simple_string and prefer streaming in test code

* driveby fix to clean up self-assign compiler warnings in test code

* driveby fix to clean up unused variable compiler warnings in test code

* another update for issue #123 (constexpr) to allow time_duration constexpr to work

* final updates to make date_time free of library - issue #134
2020-03-15 04:27:39 -07:00
JeffGarland d8a894c44a fix merge conflicts 2020-03-14 10:28:43 -07:00
Jeff Garland 139f44776d date time misc cleanup (#131)
* remove superflous HAS_MICROSECOND and HAS_MILLISECOND macros

* remove pre 1_33 facet detection for dead compilers
2020-03-12 18:36:13 -07:00
Jeff Garland 6f7b2b5056 fix report of warnings for constexpr updates on gcc9 03 mode (#130) 2020-03-10 16:24:10 -07:00
Jeff Garland 4e1b7cde45 initial set of core changes for constexpr support (issue #123) (#126)
* initial set of core changes for constexpr support (issue #123)

* fixes for constexpr core support based on ci failures (issue #123)

* drive by fix for gcc9.2 warning on polymorphic exception

* fixes for constexpr core support based on for cpp11 and cpp14 build variants (issue #123)

* more fixes for constexpr core support  (issue #123) - also fix for issue #124

* next round of changes for constexpr core support (issue #123)

* fix last msvc regression for constexpr core

* driveby fix to remove detail include

* 3rd round of changes for constexpr

* yet another msvc fix for cpp14

* minor doc fix for issue #127 - tm_isddst -> tm_isdst

* minor doc fix for issue #127 - tm_isddst -> tm_isdst

* push constexpr deep into the library including date, ptime (issue #123)

* push constexpr deep into the library including date, ptime (issue #123)

* fix latests regressions from constexpr changes in older gcc
2020-03-05 06:46:35 -07:00
Jeff Garland e26fd2ed98 pull develop to master for boost 1.72 (#117)
* Synchronize each miscrosec test to the next second (#109)

* Synchronize each miscrosec test to the next second

The aim is to avoid false positives in test_microsec when the seconds,
minutes or hours change during time read between the second_clock and
the microsec_clock.

* Improved readability of the microcec_time_clock test

* Improve performance of adding and subtracting time durations from a ptime. (#99)

Modifying ptime objects by adding and subtracting time durations was
inefficient because it extracted the date and time of day and then
re-constructed a ptime using the date and modified time of day.

This can be avoided by using the existing time_system utilities which
perform the operation by adjusting the number of ticks.

Performance is improved by a factor of 48 on my system.

* Update CI Scripts

* Add time_duration helper functions: (#113)

1. is_positive()
  - Return boolean value to indicate whether or not time duration is
    positive.
2. is_zero()
  - Return boolean value to indicate whether or not time duration is
    zero.
3. abs()
  - Return a time_duration which is the absolute value of time
    duration.

Added documentation for these helper functions and improved existing
documentation to indicate constness, return values or static
functions.

* Cease dependence on MPL (#115)
2019-12-03 17:06:28 -07:00
Nikita Kniazev 061aec856d Cease dependence on MPL (#115) 2019-11-21 07:28:47 -07:00
Gawain Bolton 1a95e81043 Add time_duration helper functions: (#113)
1. is_positive()
  - Return boolean value to indicate whether or not time duration is
    positive.
2. is_zero()
  - Return boolean value to indicate whether or not time duration is
    zero.
3. abs()
  - Return a time_duration which is the absolute value of time
    duration.

Added documentation for these helper functions and improved existing
documentation to indicate constness, return values or static
functions.
2019-11-01 04:08:45 -07:00
James E. King III c0b71da135 Update CI Scripts 2019-10-14 16:42:18 -04:00
Gawain Bolton 2fabfad443 Improve performance of adding and subtracting time durations from a ptime. (#99)
Modifying ptime objects by adding and subtracting time durations was
inefficient because it extracted the date and time of day and then
re-constructed a ptime using the date and modified time of day.

This can be avoided by using the existing time_system utilities which
perform the operation by adjusting the number of ticks.

Performance is improved by a factor of 48 on my system.
2019-10-10 13:07:48 -07:00
cclienti 3cc68a4642 Synchronize each miscrosec test to the next second (#109)
* Synchronize each miscrosec test to the next second

The aim is to avoid false positives in test_microsec when the seconds,
minutes or hours change during time read between the second_clock and
the microsec_clock.

* Improved readability of the microcec_time_clock test
2019-10-08 07:17:01 -07:00
LE GARREC Vincent 29bb209464 Fix unsigned / signed conversion
gregorian_calendar::end_of_month_day returns unsigned short and date constructor uses unsigned short too.
2019-05-10 10:32:15 -04:00
Mana Borwornpadungkitti 345abc6b67 Fix a typo in example of time_duration xmldoc (#100) 2019-03-24 08:32:07 -07:00
ehrlin b0437e2999 Renamed parameter dst_length_minutes to dst_length. (#96) 2019-03-04 11:29:48 -05:00
Marcel Raad 5902a0e577 Fix doxygen clang warnings (#97)
* doxygen: use @tparam for template parameters (clang warns about using @param).
2019-02-25 15:27:45 -05:00
James E. King III c18805c4ba update cygwin on CI before building (#93) 2018-12-02 20:36:03 -07:00
James E. King III 81d60863b6 Enhance CI for more build coverage 2018-11-02 21:27:05 -04:00
James E. King III a3d61f0d30 Enhance Travis CI build coverage 2018-10-28 11:37:32 -04:00
Sylvain Joubert dc5ce19c27 Use nullptr instead of 0 if possible
This is to prevent gcc's -Wzero-as-nullptr-constant warnings
2018-09-06 07:22:34 -04:00
James E. King III 66ee8bf48f fix failing ci jobs in travis 2018-07-14 17:37:59 +00:00
James E. King III aa19739c55 move ci to boost-ci model 2018-06-17 07:23:14 -04:00
James E. King III f76ef169a0 make valgrind return error code on failure 2018-05-15 21:16:08 -04:00
James E. King, III fd5f9aea7c Work around a gcc-7.3 issue running ubsan on travis CI
https://stackoverflow.com/questions/50024731/ld-unrecognized-option-push-state-no-as-needed
2018-04-29 10:07:42 -04:00
James E. King, III 6875e73a03 Add license file 2018-04-29 10:06:38 -04:00
James E. King III 8e1f2be360 improve code coverage results processing 2018-03-07 15:17:47 -05:00
Andrey Semashev 1838518b41 Silence MSVC warnings about conditional expression being constant.
The warning is emitted whereever std::numeric_limits<>::is_signed is used
in a conditional statement.
2018-02-10 23:42:44 -05:00
James E. King III a7ec0146c7 Update README 2018-01-28 10:09:21 -05:00
James E. King III 9690a13c55 Update README 2018-01-28 10:08:41 -05:00
James E. King III 5a70608c65 add jking to maintainers list 2018-01-28 10:05:15 -05:00
James E. King III dae0fa1b47 quiet unused variable warnings in compile_fail tests 2018-01-28 10:04:59 -05:00
James E. King III 3f092da750 trac-13159, trac-12630: fix maximum year to 9999 2018-01-24 09:44:04 -05:00
James E. King III 960c959f10 update readme and link to boostdep 2018-01-23 18:19:38 -05:00
James E. King III 1a2700d527 fix issues identified by Coverity Scan 2018-01-23 17:57:36 -05:00
James E. King III 8b92513a94 trac-1078: given to_iso_string can print special values, make from_iso_string read them 2018-01-22 15:49:25 -05:00
James E. King III d8a1ed32fb add codecov.io, cppcheck, ubsan, and coverity scan support; refactor travis to use jobs 2018-01-21 20:14:06 -05:00
James E. King, III 313c1a38f8 Merge pull request #62 from jeking3/trac-3606
trac-3606: fix remaining msvc /W4 complaints (msvc-10.0 and up)
2018-01-17 22:10:35 -05:00
James E. King III e0da18162a trac-9882: fix gcc -Wshadow errors and warnings enabled by trac-3606 2018-01-17 09:22:22 -05:00
James E. King III f35bbbe906 trac-3606: fix remaining msvc /W4 complaints (msvc-10.0 and up) 2018-01-17 09:22:22 -05:00
James E. King III f280794280 fix mingw related build issues on appveyor 2018-01-16 14:27:16 -05:00
James E. King III 18b6ca8160 trac-11142: fix boost::date_time::period_parser::delimiter_strings and add a unit test for it
also added project declarations to jamfiles, added a top level jamfile, and fixed the xmldoc jamfile
also fixed a silent failure y2038 issue in localtime handling and fixed a timezone database parse issue
2018-01-16 12:46:45 -05:00
Edward Diener b1193100b0 Merge pull request #70 from jeking3/issue-56
issue-56: fix 32/64 bit test issue with previous fix
2018-01-07 16:24:22 -05:00
James E. King III e78132c031 issue-56: fix 32/64 bit test issue with previous fix 2018-01-07 11:23:14 -05:00
Edward Diener e4379f752e Merge pull request #68 from jeking3/trac-10087
trac-10087: update the time zone database to IANA 2016c
2018-01-07 10:22:15 -05:00
James E. King III d0aec34055 trac-10087: update the time zone database to IANA 2016c 2018-01-06 11:30:28 -05:00
Edward Diener 3c794d085a Catch any runtime exception which could occur when calling c_time:local_time. 2017-12-31 21:18:41 -05:00
Edward Diener 00ab3d7226 Merge pull request #64 from jeking3/trac-11168
trac-11168: special_values handling in time duration helpers
2017-12-31 00:42:27 -05:00
Edward Diener 6e3761271d Merge pull request #60 from jeking3/trac-12363
trac-12363: fix const correctness issue in operator implementations
2017-12-31 00:05:44 -05:00
Edward Diener 2bf11e74a2 Merge pull request #59 from jeking3/trac-12910
trac-12910: allow %j without a year specifier - uses epoch year
2017-12-30 23:32:49 -05:00
Edward Diener 53d5131244 Merge pull request #65 from jeking3/trac-12101
trac-12101: fix is_pos_infinity example
2017-12-30 23:23:10 -05:00
Edward Diener 73178412b0 Merge pull request #66 from jeking3/trac-12074
trac-12074: fix get_day_of_week documentation
2017-12-30 23:22:31 -05:00
Edward Diener 2e4a3010f0 Merge pull request #58 from jeking3/issue-56
issue-56: fix binary serialization compatibility problem with time_duration
2017-12-30 16:26:42 -05:00
James E. King III de171954fe Fix serialization problem with time_duration
This fixes #56
2017-12-29 23:38:44 -05:00
James E. King III 1a931e2f5e trac-12074: fix get_day_of_week documentation 2017-12-28 21:36:42 -05:00
James E. King III f302689484 trac-12101: fix is_pos_infinity example 2017-12-28 21:33:24 -05:00
James E. King III f9f2aaf521 trac-11168: ensure special values are not automatically translated to integral types in the hours, minutes, seconds, and fractional seconds time duration helpers 2017-12-28 14:44:01 -05:00
James E. King III af8832799f trac-12363: fix const correctness issue in operator implementations 2017-12-27 08:22:50 -05:00
James E. King III e87b7120ac trac-12910: allow %j without a year specifier - uses epoch year 2017-12-26 12:02:14 -05:00
Edward Diener 5d94c6d65d Updated appveyor file with more testing and using b2 cxxstd. 2017-12-23 15:04:08 -05:00
Edward Diener 313ba3be94 Merge pull request #54 from jeking3/trac-13194
trac-13194: fix time input facet processing for %e
2017-12-23 14:29:22 -05:00
Edward Diener 91e931cbc7 Merge pull request #57 from jeking3/fix-rogue-file
add a .gitignore file to ignore a file that a test creates
2017-12-22 17:01:21 -05:00
James E. King III 484c28d442 add a .gitignore file to ignore a file that a test creates 2017-12-22 16:22:58 -05:00
Edward Diener 78e7772ad5 Merge pull request #52 from jeking3/appveyor
Add Appveyor CI support
2017-12-22 08:28:36 -05:00
James E. King, III b3b6ddd5ba trac-13194: fix time input facet processing for %e 2017-12-22 08:02:24 -05:00
James E. King III 2f616517b5 Add Appveyor CI support 2017-12-20 19:48:02 -05:00
Peter Dimov f6ab5fc0fd Merge branch 'develop' 2017-12-18 18:36:49 +02:00
Peter Dimov afa1a44f97 Install libstdc++ 4.9 for clang to avoid ::gets error 2017-11-13 22:56:29 +02:00
Peter Dimov 53da52ee05 Bracket archive use to fix xml serialization test failures 2017-11-13 21:44:04 +02:00
Peter Dimov 2434bc8f4d Pass input files properly via the run rule 2017-11-13 21:20:41 +02:00
Peter Dimov f983eef46b Add .travis.yml 2017-11-13 20:38:26 +02:00
Edward Diener dcab4d2bfa Merge branch 'develop' 2017-11-10 10:06:44 -05:00
Edward Diener 3a5f651c30 Merge pull request #50 from Lastique/silence_msvc_warnings
Silence MSVC warnings about integer truncation
2017-11-05 02:04:11 -05:00
Edward Diener 26249ccbc0 Merge pull request #49 from Lastique/update_winapi
Update Boost.WinAPI usage to the new location and namespace
2017-11-04 20:41:16 -04:00
Andrey Semashev 405e66e7e7 Silence MSVC warnings about integer truncation.
Also for day/month/year types use the value_type typedef to accept and
return numeric values of the date component.
2017-10-25 00:14:17 +03:00
Andrey Semashev 5f2d1fad55 Updated Boost.WinAPI usage to the new location and namespace. 2017-10-24 21:45:07 +03:00
Edward Diener 805b89d987 Corrected warning by casting to the correct type. 2017-10-14 10:49:26 -04:00
Marshall Clow d9b355d2c2 Remove the need for static_cast by using the correct type 2017-09-12 17:24:46 -07:00
Edward Diener e86cc2c4d5 Merge pull request #46 from Lastique/silence_msvc_conversion_warnings
Silence MSVC warnings about possible integer truncation.
2017-09-05 18:06:53 -04:00
Edward Diener efa45ac4ed Merge branch 'develop' 2017-09-05 14:09:14 -04:00
Andrey Semashev da6038df30 Silence MSVC warnings about possible integer truncation. 2017-09-05 21:06:06 +03:00
Edward Diener 313ad06704 Merge pull request #45 from Lastique/port_to_winapi
Port to Boost.WinAPI and cleanup warnings
2017-08-28 15:14:24 -04:00
Andrey Semashev 8e2a8fdcb2 Adjust indentation to match the surrounding code. 2017-08-28 20:17:40 +03:00
Andrey Semashev 266e6cc8e1 Silence MSVC warnings about unused exception variables in tests. 2017-08-28 20:06:24 +03:00
Andrey Semashev b3a1f75376 Silence MSVC warning about possible integer truncation. 2017-08-28 20:05:46 +03:00
Andrey Semashev e9ddfa6400 Silence MSVC-8 bogus warning about possible integer truncation. 2017-08-28 19:43:08 +03:00
Andrey Semashev 1e844a3143 Ported Windows-specific time functions to Boost.WinAPI. 2017-08-28 19:00:18 +03:00
Marshall Clow e46fda1c9e Merge PR 42/43/44 to master 2017-08-27 20:36:21 -07:00
Edward Diener e67bf74ac6 Merge pull request #44 from Lastique/fix_warnings
Fix warnings in tests
2017-08-11 09:25:46 -04:00
Andrey Semashev 6b3452954e Silenced clang warning about unused variable. 2017-08-11 16:10:00 +03:00
Andrey Semashev 587a677ebc Limit the warning-related pragmas to MSVC, clang and gcc specifically. 2017-08-11 16:04:16 +03:00
Andrey Semashev d3986cf902 Silence warnings about signed/unsigned mismatch in comparison operators. 2017-08-10 19:08:58 +03:00
Andrey Semashev 82f61328b2 Fixed "invalid character" warnings from clang.
The character was indeed not a valid UTF-8 character. Presumably, it is a
valid character in some national encoding, but Unicode is ubiquitous nowdays
and the compiler is not able to know the encoding anyway. Thus the commit
converts the character to a hex-escaped UTF-8 representation of character
U+00FC ('ü').
2017-08-10 19:01:45 +03:00
Marshall Clow cbcb9923e7 Merge pull request #43 from Lastique/expand_years_overflow_test_range
Expand range of values in years overflow test
2017-08-08 09:34:34 -07:00
Andrey Semashev d972d0cd69 Expand range of values in years overflow test to ensure the whole documented range is allowed. 2017-08-08 19:32:08 +03:00
Marshall Clow 7cf4f75e74 Merge pull request #42 from Lastique/fix_years_overflow2
Fixed integer overflow when subtracting many years to a gregorian date.
2017-08-08 07:47:47 -07:00
Andrey Semashev 6af6215e9e Fixed integer overflow when subtracting many years to a gregorian date.
Also added a testcase to detect the overflow.
2017-08-08 17:42:51 +03:00
Marshall Clow 2f1b24518e Merge pull request #41 from Lastique/fix_years_overflow
Fixed integer overflow when adding many years to a gregorian date.
2017-08-08 07:30:03 -07:00
Andrey Semashev 729af79cc5 Fixed integer overflow when adding many years to a gregorian date.
Also added a testcase to detect the overflow.
2017-08-08 17:23:46 +03:00
Edward Diener 24d297ba79 Merge branch 'master' of https://github.com/boostorg/date_time 2017-06-23 22:43:09 -04:00
Edward Diener 8cc821fa9b Merge branch 'develop' 2017-06-23 22:42:41 -04:00
Marshall Clow 5459990493 Bug fixes for the 1.65.0 release 2017-06-14 18:37:57 -07:00
Edward Diener 786b9eb948 Merge pull request #38 from pgroke-dt/zOS-workaround
workaround for z/OS compiler (define BOOST_DATE_TIME_NO_LOCALE)
2017-05-06 20:00:17 -04:00
Paul Groke 5974bdcbb9 workaround for z/OS compiler (define BOOST_DATE_TIME_NO_LOCALE) 2017-05-05 18:11:02 +02:00
Edward Diener 4e31167489 Merge pull request #37 from DanielaE/fix/narrowing-warnings
fix narrowing warnings
2017-04-27 19:15:38 -04:00
Daniela Engert b1dc2b306e fix narrowing warnings
Signed-off-by: Daniela Engert <dani@ngrt.de>
2017-04-26 14:03:45 +02:00
Edward Diener 8c85874006 Merge branch 'develop' 2017-04-24 12:47:42 -04:00
Edward Diener 1388380be8 Merge pull request #35 from jeking3/boost-trac-4543
4543: fix ptime 2038 issue
2017-03-28 16:56:48 -04:00
Marshall Clow 8e299776fa Merge pull request #36 from jurko-gospodnetic/fix-example-folder-path-in-docs
correct example folder path in docs from `examples/` to `example/`
2017-03-21 09:13:10 -07:00
Jurko Gospodnetić f690b29348 correct example folder path in docs from examples/ to example/ 2017-03-21 16:51:33 +01:00
James E. King, III 818dea52f3 4543: fix ptime 2038 issue 2017-02-21 16:37:53 -05:00
Edward Diener 9817537a2c Merge branch 'develop' 2017-01-04 12:41:22 -05:00
Edward Diener 47cf10d5fd Merge pull request #27 from Lastique/facets_visibility
Add support for hidden visibility
2016-12-03 02:11:50 -05:00
Marshall Clow 1e71530fb4 Merge changes from develop for the 1.63.0 release 2016-11-30 12:42:30 -08:00
Edward Diener 51659e3404 Corrected use of config macro 2016-11-07 00:12:38 -05:00
Edward Diener 22a3727798 Replace auto_ptr with unique_ptr when it is appropriate. 2016-11-06 21:01:54 -05:00
K. Noel Belcourt ef8fa5b5d5 Add declaration of to_iso_string in boost::gregorian namespace.
Should fix include order issue.
2016-11-03 13:53:13 -06:00
Rene Rivera 8e45258f00 Add, and update, documentation build targets. 2016-10-10 11:39:48 -05:00
Rene Rivera e6050c81e6 Add, and update, documentation build targets. 2016-10-07 23:07:33 -05:00
Marshall Clow f4c2ca351b Merge to master for 1.62.0 release 2016-08-17 13:06:44 -07:00
Edward Diener 6015e30391 Merge pull request #33 from ledocc/develop
add from_iso_extended_string
2016-07-12 17:01:27 -04:00
David Callu ee4ceddc52 add posix_time::from_iso_extended_string 2016-05-26 21:15:13 +02:00
Marshall Clow d20ad3083e Merge pull request #32 from saschazelzer/time_input_facet_format_string
#12180 Avoid dereferencing the input string iterator in the fall-through case.
2016-05-09 07:14:51 -06:00
Sascha Zelzer e37ce12d57 Avoid dereferencing the input string iterator in the fall-through case. 2016-05-06 12:03:34 +02:00
Marshall Clow 6cad962159 Merge branch 'develop' 2015-11-04 19:59:11 -08:00
Edward Diener a742fcbffd Merge pull request #24 from joachim-faulhaber/date_time_patches_1_59_0_v1
Warning fixes for conversion warnings
2015-10-17 00:27:44 -04:00
Edward Diener 9fbd8db5c9 Merge pull request #23 from joachim-faulhaber/date_time_patches_1_59_0
Warning fixes for conversion warnings
2015-10-17 00:27:18 -04:00
Andrey Semashev bd3973017c Added visibility attributes to exceptions, date, time and other associated types to ensure the facets have the default visibility. 2015-10-04 22:09:09 +03:00
Andrey Semashev 73de7bc29f Added visibility attributes for facets. 2015-10-04 17:57:19 +03:00
Edward Diener d7673dddb9 Merge pull request #26 from joachim-faulhaber/date_time_patches_1_59_0_v2
Date time patches 1 59 0 v2: Integer conversion warning fix
2015-09-23 08:22:06 -07:00
Joachim Faulhaber 03c419d8b6 Corrected warning fix: added static cast 2015-09-23 16:12:10 +02:00
Joachim Faulhaber 350dc3342d Corrected warning fix: added static cast 2015-09-23 16:07:12 +02:00
Joachim Faulhaber d5041e7075 Corrected warning fix: added static cast 2015-09-23 16:02:47 +02:00
Joachim Faulhaber 6d09aabddc Corrected warning fix: paren mismatch 2015-09-23 15:54:22 +02:00
Joachim Faulhaber 75176687d7 Warning fix: Implicit conversion loses integer precision. 2015-09-22 13:50:16 +02:00
Joachim Faulhaber 1519c8784e Warning fixes for conversion warnings 2015-09-22 13:01:50 +02:00
Joachim Faulhaber 86703c4df9 Warning fixes for conversion warnings 2015-09-21 17:45:12 +02:00
Daniel James 75d979c03a Merge remote-tracking branch 'origin/develop' 2015-03-03 22:19:01 +00:00
Marshall Clow f1f27d9a55 Apply pull request #22 manually; Fixes #10014 2015-03-01 13:38:04 -08:00
Marshall Clow b13b2a2b42 Patch from alexhenrie to fix spelling mistake in comment 2015-02-01 16:40:38 -08:00
Marshall Clow ca30f6a01e Documentation patch from 'faithandbrave' 2014-11-18 06:21:59 -08:00
Noel Belcourt 2c3a8b21b9 Merge pull request #18 from danieljames/metadata
Create metadata file.
2014-11-02 16:13:10 -07:00
Daniel James 7002518d0f Add metadata file. 2014-08-18 14:58:29 +01:00
Marshall Clow 79ea55aae4 Merge pull request #17 from ibmsoe/aix_fix
Renamed variable v_type to var_type so it longer conflicts with an AIX system variable.
2014-08-08 09:16:04 -07:00
Axel Ismirlian e9c5af3c45 Renamed variable v_type to var_type so it no longer conflicts with the definition of an AIX system variable. 2014-08-08 10:47:45 -05:00
Noel Belcourt b43dd52cdc Merge pull request #14 from danieljames/lexical-cast-link
Update link to lexical_cast.
2014-06-25 13:14:11 -06:00
Daniel James e4f4a89339 Update link to lexical cast. 2014-06-16 11:15:38 +01:00
Noel Belcourt f1f69e1c78 Merge pull request #13 from Lastique/develop
Restored to_time_t() function
2014-06-02 11:08:31 -06:00
Andrey Semashev ae536816ee Restored to_time_t() function removed by commit 6636f49f13. 2014-05-31 20:46:36 +04:00
Daniel James 6cc1cb5ae5 Merge pull request #12 from Lastique/develop
Fix Boost.Sync tests breakage.
2014-05-31 15:12:47 +01:00
Andrey Semashev 805bf4dffe Added comments to the type tags. 2014-05-31 17:49:52 +04:00
Andrey Semashev 1753a38289 Fix Boost.Sync tests breakage.
Re-add date/time type tags removed by commit 6636f49f13. These tags are used by Boost.Sync to categorize different date/time types.
2014-05-31 17:13:25 +04:00
K. Noel Belcourt a403bdac5b Merge branch 'develop' 2014-05-09 20:36:27 -06:00
K. Noel Belcourt 6636f49f13 Merge branch 'master' into develop 2014-05-09 20:36:03 -06:00
Noel Belcourt 98d1ae6536 Merge pull request #9 from danieljames/timezone-test
Add some automatic checks to testc_local_adjustor.

Seems okay to me, thanks!
2014-05-03 11:04:00 -06:00
Marshall Clow 23f7406095 Merge pull request #10 from maksqwe/unused_fix
Remove unused locale variable
2014-04-15 06:21:03 -07:00
Maks Naumov 2df204ba78 remove unused variable in tz_db_base::load_from_file() 2014-04-15 16:08:11 +03:00
Daniel James 6f82742918 Add some automatic checks to testc_local_adjustor.
Not full tests, but enough to catch the error fixed in
344c0dceb4.
2014-04-07 22:30:38 +01:00
Daniel James c32726ec7e Merge pull request #8 from mingulov/patch-1_1
#else/#endif comments are updated accordingly to the used condition
2014-03-25 15:05:14 +00:00
Denis Mingulov 9ad0419530 #else/#endif comments are updated accordingly to the used condition
Fixed incorrect comments for the condition at the next line:
#if defined(BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS)
There were later:
#else // BOOST_HAS_THREADS
#endif // BOOST_HAS_THREADS
It prevented a proper fast undesrstanding of the source.
2014-03-24 08:41:16 +02:00
Marshall Clow ffe85c7d4b Merge branch 'develop' of github.com:boostorg/date_time into develop 2014-03-15 08:53:40 -07:00
Marshall Clow 21a29b977b Clarified the docs and examples for previous_weekday and next_weekday. Refs #5753. 2014-03-15 08:53:14 -07:00
Marshall Clow ef81faff5f Added test for bug #5041 - %y in single digit year
Ahmed Charles: Tests pass with MSVC 2013.
2014-03-13 15:08:38 -07:00
Marshall Clow 4d44fae9ac Merge pull request #2 from DanielaE/feature/qoi-warnings
Suppress msvc level-4 warnings.
2014-03-12 08:29:22 -07:00
Marshall Clow f9d548ae92 Create first merge point for git 2014-03-12 08:24:18 -07:00
Andrey Semashev f42e7f6287 Fixed locally defined but not unused typedef warnings on GCC.
Passes tests.
2014-03-02 01:30:52 -08:00
Daniela Engert c4abfc8cbb Suppress msvc level-4 warnings.
Even when compiled at warning level 4 (i.e. all), project policies may require compilations without warnings issued.

Signed-off-by: Daniela Engert <dani@ngrt.de>
2014-02-07 18:17:40 +01:00
Noel Belcourt 344c0dceb4 Merge pull request #4 from MarcelRaad/patch-1
Fix for utc_to_local year 2038 problem
2014-02-06 20:32:28 -07:00
Noel Belcourt 30e7e7ae46 Merge pull request #1 from DanielaE/fix/bad_narrow
fix: narrow uses insufficient input char type
2014-02-06 20:23:53 -07:00
Marcel Raad c88efdea68 Fix for utc_to_local year 2038 problem
Even if std::time_t is 64-bit, multiplying the 32-bit value dd.days() by 86400 result in a negative value for dates after 2038. This results in c_time::localtime(&t2, &tms) throwing an exception.

Adding casts to std::time_t fixes this problem.
2014-01-20 13:26:43 +01:00
Daniela Engert ad1899abd9 fix: narrow uses insufficient input char type
The current implementation uses std::stringstream::narrow(char) with its 'char' input parameter type to transform 'charT' chars taken from a std::basic_istream<charT> into 'char' chars. This is most likely not what is intended if 'charT' is wider than 'char'. Fix this by using std::basic_istream<charT>::narrow(charT) instead.

Signed-off-by: Daniela Engert <dani@ngrt.de>
2013-12-30 17:41:34 +01:00
Marshall Clow 057e0aaf64 Merge DateTime bug fix to Release; Fixes #9216
[SVN r86322]
2013-10-15 15:22:02 +00:00
Marshall Clow 072b4e1b61 Fix several 'iterating past the end' bugs in Boost.DateTime; Refs #9216
[SVN r86230]
2013-10-10 15:43:31 +00:00
Stephen Kelly fe1f823e3a DateTime: Remove obsolete GCC version checks.
[SVN r86108]
2013-10-01 08:43:14 +00:00
Stephen Kelly dee09f0e62 DateTime: Remove obsolete MSVC version check.
[SVN r86027]
2013-09-30 00:18:55 +00:00
Stephen Kelly af581a1f2a DateTime: Remove obsolete MSVC version checks.
[SVN r85905]
2013-09-25 13:52:11 +00:00
Andrey Semashev 71ccdd2fe5 Added tags for integration with Boost.Sync.
[SVN r85672]
2013-09-15 10:21:59 +00:00
Marshall Clow d123f62bdc Merge fix for C++11 compilation error
[SVN r85045]
2013-07-15 13:55:21 +00:00
Marshall Clow 98f041d7fd Merge bug fixes to release. Fixes #6136. Fixes #5550
[SVN r84860]
2013-06-21 15:04:12 +00:00
Marshall Clow 990187b70c Fixed more compiler warnings; Refs #5550
[SVN r84835]
2013-06-19 15:36:32 +00:00
Marshall Clow 0054ff1ab7 Fixed more compiler warnings; Refs #6136
[SVN r84834]
2013-06-19 15:25:05 +00:00
Marshall Clow 0764743fb9 Apply patch to release branch; Fixes #8391
[SVN r84755]
2013-06-13 14:00:48 +00:00
Marshall Clow 250b88cfb5 Removed extraneous return-unreachable introduced in [84645]
[SVN r84647]
2013-06-05 20:16:21 +00:00
Marshall Clow d9874a3140 More error checking on tz files; Refs #8391
[SVN r84645]
2013-06-05 20:04:10 +00:00
Marshall Clow 47c81a9033 In C++11 the shared_ptr -> bool conversion is explicit. In custom time zone code, make the cast explicit. Fixes compilation failure in C++11
[SVN r84626]
2013-06-04 04:34:29 +00:00
Jürgen Hunold 5e009f6002 untabify to adjust to style of the rest of the file
[SVN r84290]
2013-05-15 09:14:11 +00:00
Jürgen Hunold 9454bb4e1c add inline to avoid duplicate symbol warnings
[SVN r84289]
2013-05-15 09:13:17 +00:00
Marshall Clow 5126bfbc0a Added missing call 'to_time_t' (and tests)
[SVN r84284]
2013-05-14 21:22:01 +00:00
Andrey Semashev 6bbd9f50bc Merged changes from trunk. Fixes #3471.
[SVN r80940]
2012-10-10 19:05:03 +00:00
Andrey Semashev 98bbc0b95c Fixed compilation with MinGW.
[SVN r80890]
2012-10-06 17:54:32 +00:00
Andrey Semashev 29c0f85c14 Fixed compilation with MSVC.
[SVN r80889]
2012-10-06 17:46:27 +00:00
Andrey Semashev 11974f29b2 Refs #3471. Precompute the duration conversion coefficient to avoid integer overflow. Added a test for integer overflow in the subsecond duration constructor.
[SVN r80887]
2012-10-06 17:34:06 +00:00
Marshall Clow 365c29f1a1 Merge bug fixes to release; Fixes #5550 Fixes #6136 Fixes #6513 Fixes #7111 Fixes #7112 Fixes #7113 Fixes #7342 Fixes #7426
[SVN r80797]
2012-09-30 23:25:22 +00:00
Marshall Clow 2e31c3b92e Commented out unused parameters in date-time; Refs #7426
[SVN r80722]
2012-09-27 14:24:15 +00:00
Marshall Clow db1f46894e Use memset instead of default constructor (std::tm) for deficient compilers; Refs #5550
[SVN r80710]
2012-09-26 16:57:58 +00:00
Marshall Clow 318a6ce7ea Fix typo in test case; Refs #6513
[SVN r80709]
2012-09-26 16:44:40 +00:00
Marshall Clow 2da515b579 Added default case labels to silence bogus warnings; Refs #7112; Refs #7113
[SVN r80708]
2012-09-26 16:22:04 +00:00
Marshall Clow e86d5f310f Added default case label to silence bogus warning; Refs #7111
[SVN r80703]
2012-09-25 19:08:40 +00:00
Marshall Clow 7ce2128b11 Remove unused variable; Refs #7342 Refs #6136
[SVN r80699]
2012-09-24 21:41:06 +00:00
Marshall Clow 4a5c1d20a3 Merge bug fix to trunk; fixes #7022
[SVN r80697]
2012-09-24 18:08:16 +00:00
Vicente J. Botet Escriba 7b1b5aa452 DateTime: merge [80051]
[SVN r80648]
2012-09-22 22:33:33 +00:00
Daniel James 693c89198f Merge some old datetime changes to release
- [70756] Convert jamfile for examples to boost build v2.
- [79211][79212] Suppress g++4.6 warnings in tests.
- Document NO LIB option. Fixes #6077.


[SVN r80629]
2012-09-22 16:21:43 +00:00
Marshall Clow 006adfaa84 Merge doc typo corrections to release; fixes #6595; fixes #7182
[SVN r80057]
2012-08-16 05:16:42 +00:00
Marshall Clow 2dd066d92c Fix typo in docs; Refs #7182
[SVN r80055]
2012-08-16 03:52:00 +00:00
Vicente J. Botet Escriba f0381aab02 DateTime: apply patch to manage with #7234
[SVN r80051]
2012-08-15 17:06:56 +00:00
Marshall Clow 9b94605972 Merge greg_year serialization changes to release; fixes #3633
[SVN r79539]
2012-07-15 16:49:32 +00:00
Marshall Clow e6515ce73c Refs #3633; will close when merged to release
[SVN r79228]
2012-07-02 15:14:03 +00:00
Jeff Garland a6bca8a4a5 fix for ticket 6077 -- document the NO LIB option
[SVN r79213]
2012-07-01 18:58:59 +00:00
Jeff Garland 97c2acd867 minor updates to suppress g++4.6 warnings
[SVN r79212]
2012-07-01 17:04:48 +00:00
Jeff Garland c2861c6305 minor updates to suppress g++4.6 warnings
[SVN r79211]
2012-07-01 16:52:34 +00:00
Marshall Clow 75c53e7b75 Refs #7022; will close when merged to release
[SVN r79186]
2012-06-30 15:31:33 +00:00
Jürgen Hunold 2490f1c985 Merge 73299,73301,73308 from ^/trunk
------------------------------------------------------------------------
r73299 | jhunold | 2011-07-22 14:08:03 +0200 (Fr, 22 Jul 2011) | 2 lines

Enable visibility support. Refs #2114.

------------------------------------------------------------------------
r73301 | jhunold | 2011-07-22 16:15:45 +0200 (Fr, 22 Jul 2011) | 2 lines

Enable visibility support. Refs #2114.

------------------------------------------------------------------------
r73308 | jhunold | 2011-07-23 11:24:35 +0200 (Sa, 23 Jul 2011) | 2 lines

Enable visibility support. Refs #2114.

------------------------------------------------------------------------


[SVN r73381]
2011-07-26 17:40:21 +00:00
Jürgen Hunold c81a7f7f0c Enable visibility support. Refs #2114.
[SVN r73301]
2011-07-22 14:15:45 +00:00
Marshall Clow 7f89ef42b6 Merge fixes to release; Fixes #1674
[SVN r72330]
2011-06-01 15:55:38 +00:00
Marshall Clow 72eb4479ea Merge fixes to release; Fixes #2475
[SVN r72329]
2011-06-01 15:52:09 +00:00
Marshall Clow 77d6aa82bb Applied patch; refs #1674
[SVN r72132]
2011-05-24 15:11:37 +00:00
Marshall Clow dbc9491a32 added 'load_from_stream'; refs #2475
[SVN r71720]
2011-05-04 19:54:36 +00:00
Marshall Clow bd7d632c66 Merge fixes to release; Fixes #1988
[SVN r71676]
2011-05-02 20:56:53 +00:00
Marshall Clow 2303ba2fbc Renamed BOOST_NO_THREADEX -> BOOST_HAS_THREADEX and BOOST_NO_GETSYSTEMTIMEASFILETIME --> BOOST_HAS_GETSYSTEMTIMEASFILETIME - Refs #1988
[SVN r71533]
2011-04-27 15:51:07 +00:00
Marshall Clow 0872610990 Merge fixes to release; Fixes #5126
[SVN r71250]
2011-04-14 15:58:01 +00:00
Marshall Clow e5ccaeb9e8 Merge fixes to release; Fixes #4411 Fixes #4574
[SVN r71249]
2011-04-14 15:51:59 +00:00
Marshall Clow a77b19d9d7 Applied patch; Refs #4870
[SVN r71191]
2011-04-11 18:20:53 +00:00
Marshall Clow 1e00a75273 Applied patch; Refs #5126
[SVN r71190]
2011-04-11 18:09:59 +00:00
Marshall Clow 9bb7d42086 Applied patch; Refs #4754 Refs #4411
[SVN r71186]
2011-04-11 15:05:23 +00:00
Marshall Clow 88c18beb87 Merge date/time fixes to release. Fixes #4920
[SVN r70987]
2011-04-04 23:53:07 +00:00
Marshall Clow 7052c3c5f7 Merge date/time fixes to release. Fixes #5345
[SVN r70986]
2011-04-04 23:47:20 +00:00
Marshall Clow abdd3169e4 Merge date/time fixes to release. Fixes #5250
[SVN r70985]
2011-04-04 23:45:08 +00:00
Marshall Clow f049671aa3 Merge date/time fixes to release. Fixes #4952
[SVN r70984]
2011-04-04 23:42:42 +00:00
Marshall Clow 20286c8d74 Merge date/time fixes to release. Fixes #4798
[SVN r70983]
2011-04-04 23:39:00 +00:00
Marshall Clow 6baaaaf783 Merge date/time fixes to release. Fixes #4475
[SVN r70982]
2011-04-04 23:33:53 +00:00
Marshall Clow 6d73f377d3 Merge to release. Fixes #3651 Fixes #4845
[SVN r70981]
2011-04-04 23:29:42 +00:00
Marshall Clow 2f18c57465 Applied modified patch - Refs #4798
[SVN r70780]
2011-03-31 13:32:46 +00:00
Marshall Clow 39fc9958ce Applied patch - Refs #5345
[SVN r70770]
2011-03-30 22:27:06 +00:00
Marshall Clow 2869d0f722 Applied patch - Refs 5250
[SVN r70769]
2011-03-30 22:26:36 +00:00
Marshall Clow 6b7e271ba8 Applied patch - Refs #4952
[SVN r70768]
2011-03-30 22:25:58 +00:00
Marshall Clow 7f0f89d624 Applied patch - Refs #4475
[SVN r70767]
2011-03-30 22:25:25 +00:00
Marshall Clow b498fbdd1b Applied patches - Refs #3651 Refs #4845
[SVN r70766]
2011-03-30 22:22:15 +00:00
Marshall Clow bc68ffd15b Updated examples - Refs #4920
[SVN r70765]
2011-03-30 22:21:18 +00:00
Jürgen Hunold a856c75856 convert to Boost.Build V2
[SVN r70756]
2011-03-30 19:25:08 +00:00
Steven Watanabe 5c9a890972 Revert [67111] (addition of boost/detail/iomanip.hpp) and all the commits that depend on it. ([68137], [68140], [68141], [68154], and [68165]).
[SVN r68168]
2011-01-15 08:11:51 +00:00
Bryce Adelstein-Lelbach d444c164c2 Replacing the use of <iomanip> with <boost/detail/iomanip.hpp> across Boost.
On Linux, GNU's libstdc++, which is the default stdlib for icc and clang,
cannot parse the <iomanip> header in version 4.5+ (which thankfully neither
compiler advises the use of yet), as it's original C++98-friendly
implementation has been replaced with a gnu++0x implementation.
<boost/detail/iomanip.hpp> is a portable implementation of <iomanip>, providing
boost::detail::setfill, boost::detail::setbase, boost::detail::setw,
boost::detail::setprecision, boost::detail::setiosflags and
boost::detail::resetiosflags. 



[SVN r68140]
2011-01-14 02:35:58 +00:00
Eric Niebler e524b7b26b Merged revisions 66495 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r66495 | eric_niebler | 2010-11-11 14:58:13 -0500 (Thu, 11 Nov 2010) | 1 line
  
  add missing serialization/nvp.hpp header
........


[SVN r66497]
2010-11-11 20:19:38 +00:00
Eric Niebler a161660022 add missing serialization/nvp.hpp header
[SVN r66495]
2010-11-11 19:58:13 +00:00
Daniel James df5886f64e Merge a couple of old documentation fixes for date_time.
[SVN r66268]
2010-10-30 13:38:25 +00:00
Daniel James 2c8be13241 Mergeinfo for libs/date_time and clean up whitespace differences with trunk.
[SVN r66267]
2010-10-30 13:34:37 +00:00
Daniel James 85d61ef073 Fix some links in date_time.
[SVN r63388]
2010-06-27 16:38:50 +00:00
Daniel James 80ffd14c8c Merge documentation fixes.
* Use `doc/src/*.css` instead of `doc/html/*.css`.
* Remove wiki and people directories.
* Some documentation fixes.
* Left out `minimal.css` changes and boostbook changes because of clashes.


[SVN r63347]
2010-06-26 12:30:09 +00:00
Daniel James aa1b72b62a Update various libraries' documentation build.
Mostly to use the images and css files under doc/src instead of
doc/html, usually be deleting the settings in order to use the defaults.
Also add 'boost.root' to some builds in order to fix links which rely on
it.

[SVN r63146]
2010-06-20 18:00:48 +00:00
Andrey Semashev 836b5faa3e Fixes #4154. Added iterator validity checks. If TZ string is not valid, the time zone constructor throws instead of crashing.
[SVN r62751]
2010-06-10 17:24:38 +00:00
Andrey Semashev e8561914b1 Refs #4154. Added iterator validity checks. If TZ string is not valid, the time zone constructor throws instead of crashing.
[SVN r62685]
2010-06-09 19:29:47 +00:00
Andrey Semashev 4e56397de2 Silence silly GCC warnings. Fixes #3563.
[SVN r62682]
2010-06-09 18:10:13 +00:00
Andrey Semashev 116869304c Silence silly GCC warnings. Refs #3563.
[SVN r62681]
2010-06-09 18:09:32 +00:00
Andrey Semashev 565d7d13a8 Silence the warnings. Fixes #3591.
[SVN r62677]
2010-06-09 17:41:14 +00:00
Andrey Semashev 4db9fc1777 Silence the warnings. Refs #3591.
[SVN r62676]
2010-06-09 17:40:23 +00:00
Andrey Semashev 3a779defdb Added inline qualifiers. Fixes #3647.
[SVN r62674]
2010-06-09 17:36:07 +00:00
Andrey Semashev 5bad0e79de Added inline qualifiers. Refs. #3647.
[SVN r62673]
2010-06-09 17:35:16 +00:00
Andrey Semashev a3e84e42be Merged changes from trunk (rev. 62450). Fixes #3876.
[SVN r62669]
2010-06-09 16:39:31 +00:00
Andrey Semashev 2cf2957cd5 Merged changes from trunk (rev. 62450). Fixes #3876.
[SVN r62667]
2010-06-09 16:33:36 +00:00
Andrey Semashev 901cb1fd20 Refs #3876. Made format flags %T and %R to be processed by the library in order to support them on more platforms. Also marked some flags that are known to have similar problems in the docs.
[SVN r62450]
2010-06-05 17:09:37 +00:00
Andrey Semashev b85f86f35e Fixes #2757. Added explicit casts to avoid warnings on MSVC.
[SVN r61892]
2010-05-10 09:15:48 +00:00
Andrey Semashev 3fce52f4e3 Refs #2757. Added explicit casts to avoid warnings on MSVC.
[SVN r61293]
2010-04-15 15:23:56 +00:00
Daniel James 149e759f06 Fix some whitespace differences between trunk and release.
[SVN r58878]
2010-01-10 19:17:23 +00:00
Andrey Semashev 3d472009f2 Committed changes for 1.41.
[SVN r57851]
2009-11-22 22:07:24 +00:00
Andrey Semashev 98d8bd1ded Committed changes for 1.41.
[SVN r57849]
2009-11-22 21:51:12 +00:00
Marshall Clow 73e55ee157 Fixes bug 2708
[SVN r57844]
2009-11-22 17:08:22 +00:00
Troy D. Straszheim 09b0c7c183 rm cmake from trunk. I'm not entirely sure this is necessary to satisfy the inspect script, but I'm not taking any chances, and it is easy to put back
[SVN r56942]
2009-10-17 02:07:38 +00:00
Troy D. Straszheim 0d90e990da rm cmake from the release branch before it goes out broken. Policy dictates that you never commit to release, you commit to trunk and merge to release.
[SVN r56941]
2009-10-17 01:10:45 +00:00
Andrey Semashev 865feda955 Fixes #3470. Merged from trunk revision 56548.
[SVN r56549]
2009-10-03 10:22:58 +00:00
Andrey Semashev 0255dcd796 Refs #3470. Modified documentation for c_time functions to reflect the actual behavior.
[SVN r56548]
2009-10-03 10:21:08 +00:00
Andrey Semashev cbd73eb665 Fixes #1861, #2213 merged from trunk.
[SVN r56545]
2009-10-03 10:04:00 +00:00
Andrey Semashev 4558ebe892 Docs updated according to fixes for tickets #1861 and #2213.
[SVN r56507]
2009-10-01 20:22:04 +00:00
Andrey Semashev 9be8ef4831 Refs #1861. Changed the default format for time durations to "%-%O:%M:%S%F" instead of "%-%H:%M:%S%F".
[SVN r56506]
2009-10-01 20:19:50 +00:00
Andrey Semashev 4ebe9e7979 Refs #2213. Fixed UTC zone offset boudaries.
[SVN r56505]
2009-10-01 19:43:55 +00:00
Andrey Semashev 7b3b24632e Fixes #3308. Also added some missing includes.
[SVN r56456]
2009-09-28 18:10:02 +00:00
Andrey Semashev 820a0b311f Added some missing includes.
[SVN r56384]
2009-09-25 19:39:08 +00:00
Andrey Semashev e229437b9e Refs #3308. Fixed calculation of difference between dates on 64 bit platforms.
[SVN r56372]
2009-09-24 20:21:37 +00:00
Andrey Semashev fa0df44386 Refs #3308. Changed the internal type of the gregorian dates to 32 bit integer.
[SVN r56338]
2009-09-21 15:27:52 +00:00
John Maddock 5851351380 Fix up logic and date_time Jamfiles so they build needed dependencies.
Fix PDF image paths in fusion Jamfile.v2.
Add fusion to the PDF build.

[SVN r55757]
2009-08-24 10:31:43 +00:00
Daniel James 84ae903714 Add depencies on doxygen documentation to standalone documentation targets.
This seems to be needed for building pdfs.

[SVN r55729]
2009-08-23 10:07:25 +00:00
Troy D. Straszheim 525b5dcf4c Copyrights on CMakeLists.txt to keep them from clogging up the inspect
reports.  This is essentially the same commit as r55095 on the release
branch.



[SVN r55159]
2009-07-26 00:49:56 +00:00
Troy D. Straszheim f4f2c6dd81 Add basic copyright/license to keep cmake out of the inspection report
[SVN r55095]
2009-07-22 21:51:01 +00:00
Andrey Semashev 69592d46fe Added recent changes.
[SVN r53681]
2009-06-06 11:29:34 +00:00
Andrey Semashev 87dab33026 Added recent changes.
[SVN r53680]
2009-06-06 11:29:09 +00:00
Andrey Semashev 8184015b34 Fixes #3015.
[SVN r53679]
2009-06-06 11:27:35 +00:00
Andrey Semashev dddbec8577 Fixes #2824.
[SVN r53678]
2009-06-06 11:25:55 +00:00
Andrey Semashev 94fe1d551e Fixes #2809.
[SVN r53677]
2009-06-06 11:24:09 +00:00
Andrey Semashev f985c62668 Changed tick_per_second constant type to avoid possible value truncation. Related to #2824.
[SVN r53632]
2009-06-04 12:18:59 +00:00
Andrey Semashev 9496e6ba33 Fixes #3094.
[SVN r53631]
2009-06-04 11:52:28 +00:00
Andrey Semashev b0d4735d98 Fixes #3094.
[SVN r53630]
2009-06-04 11:52:06 +00:00
Andrey Semashev e5d7b20d17 The std::tm instances are zero initialized before usage. Related to #1859.
[SVN r53629]
2009-06-04 11:40:18 +00:00
Andrey Semashev a7d470ff86 Fixes #3105.
[SVN r53628]
2009-06-04 11:36:43 +00:00
Andrey Semashev 024f7bb976 Fixes #3105.
[SVN r53627]
2009-06-04 11:35:44 +00:00
Andrey Semashev 7f908f13d9 Added explicit include of special_defs.hpp.
[SVN r53626]
2009-06-04 11:29:04 +00:00
Andrey Semashev 0970985b80 Fixes #3015.
[SVN r53625]
2009-06-04 11:22:11 +00:00
Andrey Semashev ec094bd865 The std::tm instances are zero initialized before usage. Related to #1859.
[SVN r53624]
2009-06-04 11:18:56 +00:00
Andrey Semashev 72e2a74cb9 Fixes #2809.
[SVN r53622]
2009-06-04 10:07:42 +00:00
Andrey Semashev df3999c141 Fixes #2710.
[SVN r53621]
2009-06-04 09:48:01 +00:00
Andrey Semashev ee7665b716 Fixes #2710.
[SVN r53620]
2009-06-04 09:47:12 +00:00
Andrey Semashev 1510fb009d Merged fixes for #287, #1859 and partially #1861. Improved diagnostics in case of test failures.
[SVN r53618]
2009-06-04 08:24:49 +00:00
Andrey Semashev 3e558911e4 Optimized the from_stream_type function. In case if no locales support available the code was modified to fix possible character code truncation. Related to #287.
[SVN r53529]
2009-06-01 09:51:34 +00:00
Andrey Semashev 8e9f05161d Improved diagnostics in case of test failure.
[SVN r53528]
2009-06-01 09:02:43 +00:00
Andrey Semashev d1877bf9de Added missing include
[SVN r53527]
2009-06-01 09:00:02 +00:00
Andrey Semashev 02b34018f4 The std::tm instances are zero initialized before usage in to_tm functions. Related to #1859.
[SVN r53500]
2009-05-31 14:24:25 +00:00
Andrey Semashev 34e2312fa5 Fixed a possible reading overflow in the var_string_to_int function.
Mentioned in ticket #1861.

-This line, and those below, will be ignored--

M    format_date_parser.hpp


[SVN r53485]
2009-05-31 12:03:41 +00:00
Jeremiah Willcock d72c172d31 Fixed almost all tab and min/max issues found by inspect tool
[SVN r53142]
2009-05-20 19:41:20 +00:00
Jeremiah Willcock 49fe4d03ff Fixed most tab and min/max issues from trunk inspection report
[SVN r53141]
2009-05-20 19:19:00 +00:00
John Maddock eff091cd97 Merge PDF build changes from Trunk.
[SVN r51417]
2009-02-23 18:39:32 +00:00
John Maddock 8a5d48f39c Add PDF generation options to fix external links to point to the web site.
Added a few more Boostbook based libs that were missed first time around.
Fixed PDF naming issues.

[SVN r51284]
2009-02-17 10:05:58 +00:00
Andrey Semashev c4531a9c0e Added missing include for the BOOST_NO_STD_WSTRING macro.
[SVN r51229]
2009-02-12 20:33:55 +00:00
Andrey Semashev e0efb39092 Added missing config.hpp include for the wide characters support configuration macro.
[SVN r51030]
2009-02-05 17:48:02 +00:00
Andrey Semashev fbab6c1ddf Merged fixes for #2688 and #2698 from trunk.
[SVN r50942]
2009-02-01 11:29:43 +00:00
Andrey Semashev acc5739dbd Moved last two bug fixes to 1.38 section as they are going to this release.
[SVN r50941]
2009-02-01 11:18:26 +00:00
Andrey Semashev 4812f46d4e Replaced tabs with spaces.
[SVN r50878]
2009-01-29 18:58:24 +00:00
Andrey Semashev 15c4ebd523 Removed dereferencing of end iterators of strings, which could cause crashes on MSVC. Fixed #2698.
[SVN r50877]
2009-01-29 18:54:17 +00:00
Andrey Semashev 5ac35edc3a Added missing #include. Fixed #2688.
[SVN r50876]
2009-01-29 17:44:52 +00:00
Troy D. Straszheim 983db9f225 merge of cmake build files from trunk per beman
[SVN r50756]
2009-01-24 18:57:20 +00:00
Andrey Semashev 86a65b062a testfrmwk.hpp moved to the tests directory. It was not a part of the library public interface and should not be seen by users.
[SVN r49946]
2008-11-26 21:07:14 +00:00
Boris Gubenko bffbf251f0 merge changeset/49940 into release branch
[SVN r49941]
2008-11-26 15:39:19 +00:00
Boris Gubenko 854864f008 work around the bug in aC++ (QXCR1000880488 in the HP bug tracking system)
[SVN r49940]
2008-11-26 15:12:17 +00:00
Andrey Semashev 45512be109 testfrmwk.hpp moved to the tests directory. It was not a part of the library public interface and should not be seen by users.
[SVN r49933]
2008-11-25 20:55:03 +00:00
Andrey Semashev 4a238482e8 testfrmwk.hpp moved to the tests directory. It was not a part of the library public interface and should not be seen by users.
[SVN r49932]
2008-11-25 20:36:52 +00:00
Andrey Semashev ee9241c634 Merged fixes from trunk: tickets 2521, 2523.
[SVN r49893]
2008-11-23 11:13:35 +00:00
Andrey Semashev 462d59604b Fixed a possible crash in gregorian::special_value_from_string if the string did not represent a valid special value. The find_match function now accepts the size of lookup tables rater than the maximum index.
[SVN r49875]
2008-11-22 13:40:54 +00:00
Andrey Semashev 4ea026b835 In FILETIME support functions fixed a possible integer wrapping that would cause to invalid conversion of FILETIME before 1970-01-01 into a DateTime time. In time facet changed the reaction on a too long hours string to an assert rather than truncating the string. Updated docs and tests to reflect these changes.
[SVN r49874]
2008-11-22 12:49:20 +00:00
Andrey Semashev 125082430e Silenced some warnings about unreferenced formal parameters.
[SVN r49729]
2008-11-13 20:10:23 +00:00
Andrey Semashev 415b9adb49 Silenced some warnings about unused formal parameters.
[SVN r49728]
2008-11-13 20:01:18 +00:00
Andrey Semashev b27566e158 Fixed missing <entry> tag.
[SVN r49727]
2008-11-13 19:35:04 +00:00
Andrey Semashev 33fb3ebfe0 Fixed missing <entry> tag.
[SVN r49726]
2008-11-13 19:34:32 +00:00
Andrey Semashev a89cb66083 Fixed examples for time_period constructors.
[SVN r49725]
2008-11-13 19:22:52 +00:00
Andrey Semashev f518db10a5 Fixed examples for time_period constructors.
[SVN r49724]
2008-11-13 19:22:08 +00:00
Andrey Semashev 3af0a51e62 Fixed a number of warnings about shadowed variables. Fixed
date_generator_formatter constructor that accepts custom phrase
elements.


[SVN r49723]
2008-11-13 19:05:31 +00:00
Andrey Semashev e3fcd06a86 Fixed a number of warnings about shadowed variables. Fixed
date_generator_formatter constructor that accepts custom phrase
elements.


[SVN r49722]
2008-11-13 19:04:15 +00:00
Andrey Semashev a2049a59d6 Merged various fixes from trunk.
[SVN r49705]
2008-11-12 19:37:53 +00:00
Andrey Semashev 58f4e4bbd7 Changed the Boost version that will contain the latest changes.
[SVN r49702]
2008-11-12 18:01:37 +00:00
Andrey Semashev 841625c1ac Removed some warnings about unreferenced variables (these were exceptions that were not used).
[SVN r49651]
2008-11-08 18:49:57 +00:00
Andrey Semashev 334b57e8d9 Fixed order of nth_as_str forward declaration and its first usage.
[SVN r49650]
2008-11-08 17:54:38 +00:00
Michael A. Jackson 4bc6196a71 Updating dependency information for modularized libraries.
[SVN r49628]
2008-11-07 17:05:27 +00:00
Michael A. Jackson e68bd489a6 Updating CMake files to latest trunk. Added dependency information for regression tests and a few new macros for internal use.
[SVN r49627]
2008-11-07 17:02:56 +00:00
Andrey Semashev ac3a5b489a Fixed incorrect variable naming for systems with no GetSystemTimeAsFileTime function support.
[SVN r49614]
2008-11-06 16:47:56 +00:00
Andrey Semashev ca3bb2dfe8 The test now operates on strings rather than files. This was made in order to reduce possible influence from the file system and improve diagnostics in case of failure.
[SVN r49613]
2008-11-06 16:14:02 +00:00
Andrey Semashev 1dd61b0f86 The test now operates on strings rather than files. This was made in order to reduce possible influence from the file system and improve diagnostics in case of failure.
[SVN r49612]
2008-11-06 16:03:44 +00:00
Andrey Semashev f15712c448 Fixed exception handling that led to inefficient code.
[SVN r49611]
2008-11-06 15:44:10 +00:00
Andrey Semashev b59c3dab04 Fixed exception handling that led to exception type slicing in some cases and simply inefficient code in others.
[SVN r49610]
2008-11-06 15:43:07 +00:00
Andrey Semashev fe220e57b3 Added a missing include that could break compilation of user's code with STLport.
[SVN r49609]
2008-11-06 15:12:17 +00:00
Michael A. Jackson aa74081aff Continuing merge of CMake build system files into trunk with the encouragement of Doug Gregor
[SVN r49510]
2008-11-01 13:15:41 +00:00
Andrey Semashev d170c71007 Fixed a number of misprints in the documentation, added change notes for
the latest commit. The tests are modified to support the latest changes.


[SVN r49506]
2008-11-01 10:36:57 +00:00
Andrey Semashev 7c851f60d3 Fixed various issues, including missing includes, missing IO operators
for local time, windows.h inclusion on Windows, compilation failure on
GCC 4.3, a number of warnings on GCC and MSVC. Added a new format
specifier %O to format and read more than 99 hours in time durations.
All exception throwing moved to boost::throw_exception in order to
support builds with exceptions disabled.


[SVN r49505]
2008-11-01 10:34:04 +00:00
John Maddock 9c0fb985c1 Merge fixes from Trunk.
Fixes #2392.

Change includes of <cmath> to <boost/config/no_tr1/config.hpp>.

Previously if Boost.TR1 was in the include path then including <cmath> pulls in all the new TR1 math functions, which in turn also requires linking to an external library. With auto-linking support this requires that library to have been built and be present in the library search path, even if the actual library under use is header only. 

[SVN r49314]
2008-10-13 09:00:03 +00:00
John Maddock 6c6a6b3a1c Change includes of <cmath> to <boost/config/no_tr1/config.hpp>.
Previously if Boost.TR1 was in the include path then including <cmath> pulls in all the new TR1 math functions, which in turn also requires linking to an external library.  With auto-linking support this requires that library to have been built and be present in the library search path, even if the actual library under use is header only.

Fixes #2392.


[SVN r49254]
2008-10-10 16:10:00 +00:00
Jurko Gospodnetić 19cdab0cd5 Worked around two unused function parameter compiler warnings. Suggested by Peter Klotz.
[SVN r47957]
2008-08-03 10:09:21 +00:00
Jurko Gospodnetić 7c5395ddad Corrected a comment typo in boost/date_time/string_parse_tree.hpp and removed trailing spaces.
[SVN r47641]
2008-07-20 22:02:39 +00:00
Jurko Gospodnetić 2ff01baa21 Comment typo corrections & stylistic changes.
[SVN r47368]
2008-07-13 00:15:30 +00:00
Jurko Gospodnetić e6bb691886 Applied a date_time greg_weekday.hpp typo correction patch by Peter Klotz.
[SVN r46638]
2008-06-24 08:35:07 +00:00
Daniel James 2bed3cb1a2 Add minor documentation fixes to the release branch.
(I left out the changes to the hash library).

Merged via svnmerge from 
https://svn.boost.org/svn/boost/trunk

................
  r44807 | danieljames | 2008-04-27 08:39:49 +0100 (Sun, 27 Apr 2008) | 78 lines
  
  Merge in documentation fixes.  Apart from the change to optional's documenation
  Jamfile, which I included by mistake.
  
  I wrote about this at:
  
  http://lists.boost.org/Archives/boost/2008/04/136405.php
  
  Merged revisions 44585-44806 via svnmerge from 
  https://svn.boost.org/svn/boost/branches/doc
  
  ........
    r44585 | danieljames | 2008-04-19 16:25:27 +0100 (Sat, 19 Apr 2008) | 2 lines
    
    Fix broken link to vacpp in bjam docs.
  ........
    r44586 | danieljames | 2008-04-19 16:27:36 +0100 (Sat, 19 Apr 2008) | 2 lines
    
    Fix broken link to bcpp in bjam docs.
  ........
    r44587 | danieljames | 2008-04-19 16:33:58 +0100 (Sat, 19 Apr 2008) | 2 lines
    
    DateTime documentation - Fix a link to the serialization library.
  ........
    r44588 | danieljames | 2008-04-19 16:35:36 +0100 (Sat, 19 Apr 2008) | 2 lines
    
    Fix some links in interprocess & intrusive.
  ........
    r44589 | danieljames | 2008-04-19 16:37:39 +0100 (Sat, 19 Apr 2008) | 2 lines
    
    Fix some links in the python docs.
  ........
    r44590 | danieljames | 2008-04-19 16:38:29 +0100 (Sat, 19 Apr 2008) | 2 lines
    
    Work around a quickbook bug which is affecting the python docs.
  ........
    r44591 | danieljames | 2008-04-19 16:39:34 +0100 (Sat, 19 Apr 2008) | 2 lines
    
    Fix a broken link in the numeric conversion docs.
  ........
    r44592 | danieljames | 2008-04-19 16:40:45 +0100 (Sat, 19 Apr 2008) | 2 lines
    
    Fix some links in the optional docs.
  ........
    r44593 | danieljames | 2008-04-19 16:42:09 +0100 (Sat, 19 Apr 2008) | 2 lines
    
    Fix link to the hash documentation from bimap.
  ........
    r44599 | danieljames | 2008-04-19 18:07:33 +0100 (Sat, 19 Apr 2008) | 2 lines
    
    Fix a typo in the format library.
  ........
    r44600 | danieljames | 2008-04-19 19:20:59 +0100 (Sat, 19 Apr 2008) | 1 line
    
    Initialise svnmerge.
  ........
    r44641 | danieljames | 2008-04-20 18:59:47 +0100 (Sun, 20 Apr 2008) | 2 lines
    
    Fix the lincense url in shared container iterator documentation.
  ........
    r44642 | danieljames | 2008-04-20 19:00:00 +0100 (Sun, 20 Apr 2008) | 2 lines
    
    Fix image link in the mpi documentation.
  ........
    r44643 | danieljames | 2008-04-20 19:00:11 +0100 (Sun, 20 Apr 2008) | 2 lines
    
    Fix a typo in the spirit docs.
  ........
    r44644 | danieljames | 2008-04-20 19:00:23 +0100 (Sun, 20 Apr 2008) | 2 lines
    
    Escape the slash so that quickbook doesn't think it the start of an italic section, and mess up the link. Refs #1844
  ........
    r44647 | danieljames | 2008-04-20 19:39:47 +0100 (Sun, 20 Apr 2008) | 2 lines
    
    Fix another typo in spirit docs.
  ........
................
  r45232 | danieljames | 2008-05-08 22:50:19 +0100 (Thu, 08 May 2008) | 1 line
  
  Fix some invalid xml by replacing ampersands with character entities.
................
  r45576 | danieljames | 2008-05-20 16:39:25 +0100 (Tue, 20 May 2008) | 20 lines
  
  Merge some small documentation fixes from the doc branch, and mark some
  previously merged changes as merged.
  
  Merged revisions 44811,45129,45142,45154,45281-45282,45365 via svnmerge from 
  https://svn.boost.org/svn/boost/branches/doc
  
  ........
    r45129 | danieljames | 2008-05-05 12:36:50 +0100 (Mon, 05 May 2008) | 2 lines
    
    Update navbar links in boostbook.
  ........
    r45282 | danieljames | 2008-05-11 14:15:31 +0100 (Sun, 11 May 2008) | 2 lines
    
    Group functions in the hash header - requires Frank's free-function-group fix.
    (not included in release branch).
  ........
    r45365 | danieljames | 2008-05-14 21:39:00 +0100 (Wed, 14 May 2008) | 2 lines
    
    Add boost.root to standalone hash documentation.
    (not included in release branch).
  ........
................


[SVN r45622]
2008-05-21 20:57:05 +00:00
Daniel James aebbc1c144 Merge in documentation fixes. Apart from the change to optional's documenation
Jamfile, which I included by mistake.

Fixes #1659, #1661, #1684, #1685, 1687, #1690, #1801

I wrote about this at:

http://lists.boost.org/Archives/boost/2008/04/136405.php

Merged revisions 44585-44806 via svnmerge from 
https://svn.boost.org/svn/boost/branches/doc

........
  r44585 | danieljames | 2008-04-19 16:25:27 +0100 (Sat, 19 Apr 2008) | 2 lines
  
  Fix broken link to vacpp in bjam docs. Refs #1512
........
  r44586 | danieljames | 2008-04-19 16:27:36 +0100 (Sat, 19 Apr 2008) | 2 lines
  
  Fix broken link to bcpp in bjam docs. Refs #1513
........
  r44587 | danieljames | 2008-04-19 16:33:58 +0100 (Sat, 19 Apr 2008) | 2 lines
  
  DateTime documentation - Fix a link to the serialization library. Refs #1659
........
  r44588 | danieljames | 2008-04-19 16:35:36 +0100 (Sat, 19 Apr 2008) | 2 lines
  
  Fix some links in interprocess & intrusive. Refs #1661
........
  r44589 | danieljames | 2008-04-19 16:37:39 +0100 (Sat, 19 Apr 2008) | 2 lines
  
  Fix some links in the python docs. Refs #1684.
........
  r44590 | danieljames | 2008-04-19 16:38:29 +0100 (Sat, 19 Apr 2008) | 2 lines
  
  Work around a quickbook bug which is affecting the python docs. Refs #1684.
........
  r44591 | danieljames | 2008-04-19 16:39:34 +0100 (Sat, 19 Apr 2008) | 2 lines
  
  Fix a broken link in the numeric conversion docs. Refs #1685
........
  r44592 | danieljames | 2008-04-19 16:40:45 +0100 (Sat, 19 Apr 2008) | 2 lines
  
  Fix some links in the optional docs. Refs #1687
........
  r44593 | danieljames | 2008-04-19 16:42:09 +0100 (Sat, 19 Apr 2008) | 2 lines
  
  Fix link to the hash documentation from bimap. Refs #1690
........
  r44599 | danieljames | 2008-04-19 18:07:33 +0100 (Sat, 19 Apr 2008) | 2 lines
  
  Fix a typo in the format library. Refs #1801
........
  r44600 | danieljames | 2008-04-19 19:20:59 +0100 (Sat, 19 Apr 2008) | 1 line
  
  Initialise svnmerge.
........
  r44641 | danieljames | 2008-04-20 18:59:47 +0100 (Sun, 20 Apr 2008) | 2 lines
  
  Fix the lincense url in shared container iterator documentation.
........
  r44642 | danieljames | 2008-04-20 19:00:00 +0100 (Sun, 20 Apr 2008) | 2 lines
  
  Fix image link in the mpi documentation.
........
  r44643 | danieljames | 2008-04-20 19:00:11 +0100 (Sun, 20 Apr 2008) | 2 lines
  
  Fix a typo in the spirit docs.
........
  r44644 | danieljames | 2008-04-20 19:00:23 +0100 (Sun, 20 Apr 2008) | 2 lines
  
  Escape the slash so that quickbook doesn't think it the start of an italic section, and mess up the link. Refs #1844
........
  r44647 | danieljames | 2008-04-20 19:39:47 +0100 (Sun, 20 Apr 2008) | 2 lines
  
  Fix another typo in spirit docs.
........


[SVN r44807]
2008-04-27 07:39:49 +00:00
Emil Dotchevski 48a959accb Reverting previous change... #define NOMINMAX isn't a good idea either.
[SVN r44473]
2008-04-16 18:36:30 +00:00
Emil Dotchevski 6cfc268a27 Added #define NOMINMAX to preserve standard behavior of std::min and std::max. Is including <windows.h> here necessary?
[SVN r44472]
2008-04-16 18:24:17 +00:00
Daniel James 40dd655abf Merge in a few license fixes that I missed before.
https://svn.boost.org/svn/boost/trunk

........
  r43467 | danieljames | 2008-03-03 12:10:35 +0000 (Mon, 03 Mar 2008) | 2 lines
  
  Tell subversion that date_time.doc is a text file, not a word document.
........
  r43468 | danieljames | 2008-03-03 12:11:25 +0000 (Mon, 03 Mar 2008) | 1 line
  
  Fix license link in date_time.doc
........
  r43803 | danieljames | 2008-03-23 13:03:24 +0000 (Sun, 23 Mar 2008) | 1 line
  
  Fix another license link I seem to have missed.
........


[SVN r43874]
2008-03-26 21:16:15 +00:00
Daniel James 342e17aa5a Fix another license link I seem to have missed.
[SVN r43803]
2008-03-23 13:03:24 +00:00
Daniel James 890e8ed154 Fix license link in date_time.doc
[SVN r43468]
2008-03-03 12:11:25 +00:00
Daniel James 9a267135c1 Tell subversion that date_time.doc is a text file, not a word document.
[SVN r43467]
2008-03-03 12:10:35 +00:00
Daniel James c9f634b1d4 Merged revisions 43211,43214-43219,43222-43225,43227-43238,43242,43244-43245,43249-43250,43257-43259,43261,43263,43265,43267-43268,43270-43271,43273,43275-43279,43284-43289,43291,43295,43297-43298,43304-43305,43307,43313,43315,43324,43326-43327,43331,43333,43339-43343,43345,43348,43350,43352-43353,43355-43356,43358,43360,43366-43367,43369-43370,43372-43376,43378-43389,43394,43396-43398,43400-43401,43403-43404,43406-43408,43413-43415,43417-43418,43420,43422-43423 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r43417 | danieljames | 2008-02-26 22:04:55 +0000 (Tue, 26 Feb 2008) | 2 lines
  
  Fix a link to Boost.Bimap.
........
  r43418 | danieljames | 2008-02-26 22:07:25 +0000 (Tue, 26 Feb 2008) | 2 lines
  
  Change another link that's no longer in the repository to link to the website.
........
  r43422 | danieljames | 2008-02-27 18:51:14 +0000 (Wed, 27 Feb 2008) | 1 line
  
  Fix broken copyright urls. Fixes #1573.
........
  r43423 | danieljames | 2008-02-27 19:22:01 +0000 (Wed, 27 Feb 2008) | 1 line
  
  Fix incorrect links to copyright of the form 'http:#www.boost.org
........


[SVN r43425]
2008-02-27 20:00:24 +00:00
Daniel James 9b5d99078e Fix broken copyright urls. Fixes #1573.
[SVN r43422]
2008-02-27 18:51:14 +00:00
Daniel James 53665b53d7 Merge the documentation build fix from trunk.
[SVN r41507]
2007-11-30 19:30:09 +00:00
Daniel James 1629ac31d0 Frank Mori Hess's patch to get the documentation building.
[SVN r41506]
2007-11-30 19:28:46 +00:00
Beman Dawes e7e613f518 Full merge from trunk at revision 41356 of entire boost-root tree.
[SVN r41370]
2007-11-25 18:38:02 +00:00
Beman Dawes 00782e4d6a Full merge from trunk at revision 41356 of entire boost-root tree.
[SVN r41369]
2007-11-25 18:07:19 +00:00
Beman Dawes a9c191bb59 // Add or correct comment identifying Boost library this header is associated with.
[SVN r41173]
2007-11-17 20:13:16 +00:00
David Deakins 957b7ae81c Have the local_time and universal_time functions use GetSystemTime and SystemTimeToFileTime on Windows CE (since GetSystemTimeAsFileTime is not present)
[SVN r41069]
2007-11-13 20:19:39 +00:00
Ralf W. Grosse-Kunstleve c72177cb58 gcc 4.3.0 compatibility (resolves new "changes meaning" error)
[SVN r40558]
2007-10-29 19:12:56 +00:00
Anthony Williams b04e84c09c New mutex implementations, more akin to C++0x
[SVN r39784]
2007-10-08 15:41:05 +00:00
Beman Dawes f79faf89f8 Starting point for releases
[SVN r39706]
2007-10-05 14:25:06 +00:00
Caleb Epstein 43f9e6bc25 Quiet unused argument warnings from gcc.
[SVN r39274]
2007-09-14 17:18:02 +00:00
Boris Gubenko 7171662c11 on HP-UX, macro BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS should be defined only if macro _REENTRANT is defined
[SVN r39256]
2007-09-14 02:25:06 +00:00
Vladimir Prus 1cbafb20d0 Remove V1 Jamfiles
[SVN r38516]
2007-08-08 19:02:26 +00:00
nobody eb66d74eb4 This commit was manufactured by cvs2svn to create tag
'Version_1_34_1'.

[SVN r38286]
2007-07-24 19:28:14 +00:00
Thomas Witt 62c7e837f1 Patches from Trac #583.
[SVN r37846]
2007-06-01 16:12:08 +00:00
Jeff Garland 908a40bdc1 apply changes from adobe to remove else clause which makes some compilers spit out a warning.
[SVN r37775]
2007-05-25 19:59:41 +00:00
Jeff Garland 0414642fc6 apply changes from adobe to remove else clause which makes some compilers spit out a warning.
[SVN r37775]
2007-05-25 19:59:41 +00:00
Jeff Garland ccab546ab9 updates for Mexico DST -- sourceforge tracker #1695914
[SVN r37478]
2007-04-21 22:31:07 +00:00
Jeff Garland ff8d2cf762 timezone updates for mexico sf tracker#1695914
[SVN r37477]
2007-04-21 18:38:39 +00:00
Jeff Garland f2860feacb fix and clarify ticks_per_second docs.
[SVN r37476]
2007-04-21 18:17:19 +00:00
Jeff Garland 387f8b7bf6 fix and clarify ticks_per_second docs.
[SVN r37476]
2007-04-21 18:17:19 +00:00
Rene Rivera 9586e247ac Put in the build support for using the doxproc, Python based, Doxygen to BoostBook translator.
[SVN r37457]
2007-04-17 04:44:59 +00:00
Jeff Garland 2cbb73d151 SF tracker 1672139 - fix end time in au_dst_traits to 3 hours instead of 2
[SVN r37130]
2007-03-02 05:19:06 +00:00
Jeff Garland 2a19fc5fb0 SF tracker 1672139 - fix end time in au_dst_traits to 3 hours instead of 2
[SVN r37130]
2007-03-02 05:19:06 +00:00
Jeff Garland d9ae9fb1cf Remove unused variables from serialization code to prevent warnings
[SVN r37129]
2007-03-02 02:50:49 +00:00
Jeff Garland 998143109f Remove unused variables from serialization code to prevent warnings
[SVN r37129]
2007-03-02 02:50:49 +00:00
Jeff Garland 461e80afd6 Changes to fix the compile-time dst rules engines for 2007 US and Canada dst changes
[SVN r37128]
2007-03-02 02:04:55 +00:00
Jeff Garland 07b8df62f0 Changes to fix the compile-time dst rules engines for 2007 US and Canada dst changes
[SVN r37127]
2007-03-02 01:54:49 +00:00
Jeff Garland b232691602 allow tests to pass if the clock time is equal to the last -- happens on fast machines.
[SVN r37066]
2007-02-25 20:00:37 +00:00
Jeff Garland 0b401d8914 allow tests to pass if the clock time is equal to the last -- happens on fast machines.
[SVN r37066]
2007-02-25 20:00:37 +00:00
Jeff Garland f504c68f58 fix problem with acc by including sstream
[SVN r37047]
2007-02-23 15:30:31 +00:00
Jeff Garland 4a404c0a45 fix problem with acc by including sstream
[SVN r37047]
2007-02-23 15:30:31 +00:00
Jeff Garland 3dba864d34 updates to docs for new timezone checkins
[SVN r37043]
2007-02-23 02:21:58 +00:00
Jeff Garland 69695af4ac updates to docs for new timezone checkins
[SVN r37041]
2007-02-23 02:06:15 +00:00
Jeff Garland 5becc5c309 test update to coorespond to new 2007 DST rules in US and new tz database.csv file
[SVN r37011]
2007-02-20 03:01:31 +00:00
Jeff Garland 6cfc007431 test update to coorespond to new 2007 DST rules in US and new tz database.csv file
[SVN r37011]
2007-02-20 03:01:31 +00:00
Jeff Garland 0ed19eeb72 Update of DST rules for US 2007 -- plus a few misc changes for other locations
[SVN r37010]
2007-02-20 03:00:32 +00:00
Jeff Garland 37aae6e922 Update of DST rules for US 2007 -- plus a few misc changes for other locations
[SVN r37010]
2007-02-20 03:00:32 +00:00
Jeff Garland 53042733a8 minor documentation fix for end_of_month method
[SVN r37004]
2007-02-19 13:30:42 +00:00
Jeff Garland fa70a30546 minor documentation fix
[SVN r37003]
2007-02-19 13:26:56 +00:00
Jeff Garland 1d86211a3b small documentation fix suggested by Dave A.
[SVN r35908]
2006-11-08 00:03:09 +00:00
Rene Rivera 9aec576490 Remove obsolete Boost.Build v1 files.
[SVN r35880]
2006-11-06 17:10:46 +00:00
Jeff Garland bf9502ac86 add single overall include file for date time lib
[SVN r35756]
2006-10-27 23:21:38 +00:00
Jeff Garland bc53043e5c add single overall include file for date time lib
[SVN r35756]
2006-10-27 23:21:38 +00:00
Daniel James 325834a1d7 Merge in recent fixes for inspect errors.
[SVN r34973]
2006-08-27 10:40:36 +00:00
Daniel James 68f806176d Fix a link to the local copy of the license.
[SVN r34959]
2006-08-26 14:33:17 +00:00
Jeff Garland 4288e5fc08 minor wording update
[SVN r34868]
2006-08-11 13:53:46 +00:00
Jeff Garland cbebd173e3 minor wording update
[SVN r34868]
2006-08-11 13:53:46 +00:00
Jeff Garland ed1cb467d0 fixes for copyright
[SVN r34640]
2006-07-20 15:55:16 +00:00
Jeff Garland 0249249c48 fixes for copyright
[SVN r34640]
2006-07-20 15:55:16 +00:00
Gennaro Prota 907f1131c7 fixed HTML code (this caused the inspect tool to detect broken links, but that wasn't the actual problem)
[SVN r34577]
2006-07-17 04:09:03 +00:00
Gennaro Prota 97d1a0a7af use new license reference text; silence inspect tool false positives about min/max
[SVN r34576]
2006-07-17 03:56:05 +00:00
Gennaro Prota ef9df63195 fixed license reference text; parenthesized max identifiers, even if inside a comment, to avoid spurious inspect tool detections
[SVN r34575]
2006-07-17 03:48:31 +00:00
Jeff Garland 53030e4527 minor change to fix issue that prevents sun 5.8 from linking correctly
[SVN r34454]
2006-07-03 15:25:19 +00:00
Jeff Garland c6074c0df7 minor change to fix issue that prevents sun 5.8 from linking correctly
[SVN r34453]
2006-07-03 15:19:58 +00:00
Jeff Garland 627693d12d Update changes / bugfixes and complier notes for 1.34 release
[SVN r34392]
2006-06-25 17:04:35 +00:00
Jeff Garland a178b0149a Update changes / bugfixes and complier notes for 1.34 release
[SVN r34392]
2006-06-25 17:04:35 +00:00
Jeff Garland 17b02e954c fix an issue with multiple defines under some circumstances -- change static const into an enum
[SVN r34382]
2006-06-23 18:05:48 +00:00
Jeff Garland 19e07d6bf2 fix an issue with multiple defines under some circumstances -- change static const into an enum
[SVN r34381]
2006-06-23 17:55:18 +00:00
Jeff Garland 0dadfe419a add some test diagnostics to get more information about regression failures
[SVN r34283]
2006-06-12 14:46:54 +00:00
Jeff Garland 5cd09b1cfb add some test diagnostics to get more information about regression failures
[SVN r34283]
2006-06-12 14:46:54 +00:00
Jeff Garland 963cb4d5c8 couple minor documentation updates before 1.34 release
[SVN r34071]
2006-05-23 15:05:05 +00:00
Jeff Garland c95b124905 couple minor documentation updates before 1.34 release
[SVN r34071]
2006-05-23 15:05:05 +00:00
Jeff Garland 2f8e311836 Fix header guard mismatch issue -- basically cleanup as the guard mismatch doesn't have an effect in this case.
[SVN r34067]
2006-05-23 14:38:15 +00:00
Jeff Garland c1302ab112 Fix header guard mismatch issue -- basically a no-op
[SVN r34066]
2006-05-23 14:33:55 +00:00
Jeff Garland 0ba0b0ad23 updates to time_period to add section for mutors -- correctly document shift functions
[SVN r33974]
2006-05-15 15:34:18 +00:00
Jeff Garland abee080986 updates to time_period to add section for mutors -- correctly document shift functions
[SVN r33973]
2006-05-15 15:18:55 +00:00
Eric Niebler 9ff67ef64d doxygen references automatically generated now. deleting stale ones
[SVN r33617]
2006-04-10 03:27:13 +00:00
Eric Niebler e9752ce604 doxygen references automatically generated now. deleting stale ones
[SVN r33617]
2006-04-10 03:27:13 +00:00
Jeff Garland 2d22341ee6 apply Eric Nieblers patch to fix doxygen processing
[SVN r33615]
2006-04-09 20:31:57 +00:00
Jeff Garland 0f7188c4c2 apply Eric Nieblers patch to the Jamfile
[SVN r33614]
2006-04-09 20:22:35 +00:00
Jeff Garland 269f799e99 Apply modified version of gcc warning patch from Stephan L. to main branch
[SVN r33481]
2006-03-26 21:35:58 +00:00
Jeff Garland 4a3a71749e Apply modified version of gcc warning patch from Stephan L.
[SVN r33480]
2006-03-26 21:29:10 +00:00
Jeff Garland bd25005368 add documentation for the expand function on date and time periods.
[SVN r33479]
2006-03-26 20:45:06 +00:00
Jeff Garland 2af5cd1361 add an expand function to the period
[SVN r33478]
2006-03-26 20:12:41 +00:00
Rene Rivera 485762ff72 Merge from HEAD.
[SVN r33458]
2006-03-23 16:12:40 +00:00
Rene Rivera 6d728ddd40 Add missing requirement rule when using the shared version of serialization.
[SVN r33456]
2006-03-23 15:16:22 +00:00
nobody d877231543 This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r33417]
2006-03-21 02:26:31 +00:00
Jeff Garland ac92083505 Fix regression errors that showed up under FreeBSD with GCC and the LANG environment set to russian -- changed parser to use classic locale instead of blank locale
[SVN r33416]
2006-03-21 02:26:30 +00:00
Jeff Garland 83be4dd883 Shadow warning fixes from Steven L.
[SVN r33407]
2006-03-20 13:29:16 +00:00
Jeff Garland e9261beb4c Fix regression test error with greg_serialize_dll by changing Jamfile to pick up dll properly.
[SVN r33377]
2006-03-18 19:58:03 +00:00
Jeff Garland f9576c4a32 Supress warnings for VC
[SVN r33372]
2006-03-18 16:47:55 +00:00
Vladimir Prus d3a6dd9385 The date_time/testgreg_serialize_dll test should link to date_time DLL,
not static lib.


[SVN r33184]
2006-03-01 09:35:06 +00:00
Alisdair Meredith 27ca552ed8 Patch for Borland patch - did not include workaround.hpp
[SVN r33134]
2006-02-27 08:02:30 +00:00
Alisdair Meredith ee74aad32f Workarounds updated for BCB2006 compiler
[SVN r33125]
2006-02-26 20:10:18 +00:00
Jeff Garland b3e3232bbd Reduce the usage of basic_stringstream as much a possible to work around VC8 memory leak issue.
[SVN r32998]
2006-02-18 20:58:01 +00:00
Vladimir Prus 7984815e6e Attempt to sync Jamfile.v2 with Jamfile
[SVN r32490]
2006-01-31 16:57:16 +00:00
Vladimir Prus 8a6b03a744 Update Jamfile.v2
[SVN r32350]
2006-01-18 12:32:54 +00:00
Douglas Gregor b5a98e0321 Fix regression testing on GCC 2.95.x, I think
[SVN r32184]
2005-12-29 19:46:55 +00:00
Jeff Garland 7e1b6bbef4 minor patch from Davlet Panech to stop ICE on MSVC6 SP6 with STLPort 4.6.2
[SVN r31927]
2005-12-06 03:49:15 +00:00
Jeff Garland 26f14eda80 add dll linking for special_value_from_string declaration.
[SVN r31802]
2005-11-28 13:21:54 +00:00
Jeff Garland 258a9d72f3 add a dll linked test for serialization to make sure all the symbols are exported
[SVN r31801]
2005-11-28 13:20:35 +00:00
Jeff Garland 66721a13e4 Fix one last unqualified tm struct --> make std::tm
[SVN r31521]
2005-11-01 04:27:29 +00:00
Jeff Garland 334a28d8ce changes to for QNX - put time_t references into namespace std
[SVN r31496]
2005-10-27 13:37:30 +00:00
Jeff Garland c2a307320b changes for tracker issue 1178092 -- change in convert_to_lower to make local a const static and speed up parsing.
[SVN r31460]
2005-10-25 12:49:02 +00:00
Jeff Garland cfc379713a fixes for issue 949189 -- perhaps cleans up some warnings.
[SVN r31459]
2005-10-25 12:42:20 +00:00
Jeff Garland cfea9b8090 remove obsolete file -- class renamed
[SVN r31457]
2005-10-25 03:52:30 +00:00
Jeff Garland 6f7fc0d116 Qualify all references to tm with std:: hopefully will fix QNX compile issues
[SVN r31456]
2005-10-25 03:38:40 +00:00
Jeff Garland f2d4fac8cd Patch to silence vc8 deprication warnings since we plan to keep using std::gmtime.
[SVN r31455]
2005-10-25 02:42:43 +00:00
Jeff Garland c83211770f add new tests to support wide chars in timezones
[SVN r31437]
2005-10-23 20:15:39 +00:00
Jeff Garland 267c42d33f Start on feature changes required to support wide chars in time zones and eventual move of all the time zone core to date_time namespace
[SVN r31436]
2005-10-23 20:15:07 +00:00
Jeff Garland 6ab46fc3d4 fixes for regression in gcc295 compilers
[SVN r30914]
2005-09-11 23:21:00 +00:00
Jeff Garland 2edb54a390 Fix negative month addition issue.
[SVN r30823]
2005-09-05 22:07:23 +00:00
Jeff Garland e8ba437845 Add tests to fix negative durations wrapping problem (wrapping int fix)
[SVN r30822]
2005-09-05 22:07:05 +00:00
Jeff Garland 09ff47960f iso tokenizer fix test updates - causes exception when missing digits - hence bad format
[SVN r30821]
2005-09-05 21:34:51 +00:00
Jeff Garland 1ed0baf300 iso tokenizer fixes - causes exception when missing digits - hence bad format
[SVN r30820]
2005-09-05 21:34:26 +00:00
Jeff Garland 33bce3542a add local time iterator and local time period tests to Jamfile
[SVN r30819]
2005-09-05 21:30:41 +00:00
Jeff Garland 71b24a55de fixes for day of month parsing problem
[SVN r30818]
2005-09-05 21:10:50 +00:00
Jeff Garland 73ddcd7ead add tests for day of month parsing problem
[SVN r30817]
2005-09-05 21:10:09 +00:00
Jeff Garland 0117462bf5 doc fixes associated with day of month parsing problem
[SVN r30816]
2005-09-05 21:03:29 +00:00
Jeff Garland 895869d16f Fix propleptic into proleptic
[SVN r30711]
2005-08-28 16:02:42 +00:00
John Maddock e73f083d86 Large patch from Ulrich Eckhardt to fix support for EVC++ 4.
[SVN r30670]
2005-08-25 16:27:28 +00:00
Jeff Garland 7ae423541f fix shadow warnings and remove mis-coded copy constructor
[SVN r30607]
2005-08-20 18:22:06 +00:00
Jeff Garland 3b99d4e120 Remove localtime_r functions for borland compilers.
[SVN r30374]
2005-08-02 13:02:41 +00:00
Jeff Garland 2e0211f0f8 Documentation of variety of updates -- primarily bug fix for periods with length 0 or 1.
[SVN r30236]
2005-07-25 03:03:13 +00:00
Jeff Garland 9910fd906e Changes to docs in support of fixes for period bug.
[SVN r30235]
2005-07-24 23:52:05 +00:00
Jeff Garland 9b1d477e1c Fixes to period to resolve inconsistencies with handling periods of -1, 0, 1 durations. Add new tests for these cases
[SVN r30234]
2005-07-24 23:48:42 +00:00
Jeff Garland 01736f5847 Fixes to period to resolve inconsistencies with handling periods of -1, 0, 1 durations.
[SVN r30233]
2005-07-24 23:47:50 +00:00
Jeff Garland ebd6ac409c Fixes so that from_iso_string correctly handles subsecond resolutions.
[SVN r30175]
2005-07-19 11:17:32 +00:00
Jeff Garland 05de944281 Add tests for subsecond resolution for from_iso_string -- patched to work correctly now.
[SVN r30174]
2005-07-19 11:16:18 +00:00
Jeff Garland ee65dedf4d move all tests within an exception block to see if we can track down odd cw failures
[SVN r30151]
2005-07-17 23:58:33 +00:00
Jeff Garland f8b6cee61b Reorder input iterator dereferences to ensure end of stream is checked first
[SVN r30150]
2005-07-17 23:57:59 +00:00
Jeff Garland 1154781c0b various doc typo updates
[SVN r30136]
2005-07-16 18:45:09 +00:00
Jeff Garland 7e719a84d9 tighten up testing for various input i/o formats
[SVN r30135]
2005-07-16 18:37:46 +00:00
Jeff Garland 748fe1433d critical fix for time input functions that made iso and other undelimited time formats fail to parse correctly -- additional tests
[SVN r30130]
2005-07-16 00:37:26 +00:00
Jeff Garland 74de942d09 critical fix for time input functions that made iso and other undelimited time formats fail to parse correctly
[SVN r30129]
2005-07-16 00:36:56 +00:00
Jeff Garland fe0f322e98 change filename so it is within the allowed file lengths
[SVN r30026]
2005-07-13 04:04:12 +00:00
Jeff Garland 8ff4398901 fix tabs in file problem
[SVN r30025]
2005-07-13 03:59:54 +00:00
Douglas Gregor 38af1f49cf Should not check in catalog.xml
[SVN r29937]
2005-07-07 17:43:20 +00:00
Jeff Garland 6cfa174d56 documentation updates to support changes to time duration formatting. Also improvements to documentation of special value interfaces in ptime and other classes
[SVN r29883]
2005-07-04 02:35:20 +00:00
Jeff Garland 04674429a9 do some nice syntax highlighting for html versions
[SVN r29882]
2005-07-04 02:34:05 +00:00
Jeff Garland cd68e581a6 add a few tests that have been there for ages, but somehow got dropped from the Jamfile -- this includes several i/o tests. Also removed a redundant test
[SVN r29878]
2005-07-03 06:56:21 +00:00
Jeff Garland 64185b666d unfortunate last minute major bug with duration output with negative time durations - fixes allow for additional user control of the sign format for the general case and make sure all elements of duration have absolute values. This change adds new tests to make sure the bug is gone
[SVN r29877]
2005-07-03 06:55:06 +00:00
Jeff Garland 8bb7f140af unfortunate last minute major bug with duration output with negative time durations - fixes allow for additional user control of the sign format for the general case and make sure all elements of duration have absolute values. Also cleaned up a few out of date comments
[SVN r29876]
2005-07-03 06:53:13 +00:00
Jeff Garland ad50aac6b7 Added tests to test fix for a serious bug with conversions for negative time durations. Need the minutes and seconds fields to be converted to absolute values. This was creating a downstream bug in i/o code where negative durations were not streaming out correctly
[SVN r29875]
2005-07-02 23:36:32 +00:00
Jeff Garland 4901ad91e4 fix a serious bug with conversions for negative time durations. Need the minutes and seconds fields to be converted to absolute values. This was creating a downstream bug in i/o code where negative durations were not streaming out correctly
[SVN r29874]
2005-07-02 23:35:06 +00:00
Jeff Garland bc754d907c add tests for fix to input parsing. Tests for bug that would cause an extra character to be consumed in the stream when parsing special value cases. In particular something like a date period like [2005-Jun-10/not-a-date-time] would fail to parse correctly even though this can be constructed and output just fine
[SVN r29854]
2005-07-01 03:00:34 +00:00
Jeff Garland 443ab4fce8 fix an input parsing bug that would cause an extra character to be consumed in the stream when parsing special value cases. In particular something like a date period like [2005-Jun-10/not-a-date-time] would fail to parse correctly even though this can be constructed and output just fine
[SVN r29853]
2005-07-01 02:58:57 +00:00
Jeff Garland 12d121e876 fix bug with exception handling in new i/o code -- only throw exceptions if stream bits set correctly -- cooresponding doc updates
[SVN r29824]
2005-06-28 13:13:31 +00:00
Jeff Garland 54e7c78df6 fix bug with exception handling in new i/o code -- only throw exceptions if stream bits set correctly
[SVN r29823]
2005-06-28 13:12:24 +00:00
Vladimir Prus 3be30cf06b New convenience rule package.install.
Use that rule in top-level Jamfile.v2.
Introduce new top-level Jamfile rule 'boost-install'.
Use it in date_time, other libraries to follow soon.


[SVN r29805]
2005-06-27 12:37:47 +00:00
Vladimir Prus 4f9cd8f96e link-runtime -> runtime-link.
Patch from Jurgen Hunold.


[SVN r29729]
2005-06-22 10:11:39 +00:00
Jeff Garland 5ee5fd5d7f information entry about serialization bugfix
[SVN r29713]
2005-06-21 03:51:13 +00:00
Jeff Garland 7472b1e047 fixes for special value serialization bug
[SVN r29712]
2005-06-21 03:35:34 +00:00
Jeff Garland bb21d778a0 updates to test for %% bugfix -- removal of references to ptime_facet in tests
[SVN r29622]
2005-06-16 13:23:38 +00:00
Jeff Garland fa053e1172 cleanup/removal of ptime_facet typedefs
[SVN r29620]
2005-06-16 13:22:27 +00:00
Jeff Garland ea43217c2b fix for bug with %% strings in formats
[SVN r29619]
2005-06-16 13:21:39 +00:00
Jeff Garland ede9a3cc00 more documentation tweaks -- some to match bug fix for %% strings in facets -- others to remove ptime_facet references
[SVN r29618]
2005-06-16 13:19:44 +00:00
Jeff Garland f9e74aada5 various doc updates including a fix for bare ampersands in references
[SVN r29576]
2005-06-15 04:11:22 +00:00
Jeff Garland 1f5d0d6f47 update to references before the 1.33
[SVN r29550]
2005-06-13 11:51:52 +00:00
Jeff Garland d863baf4c7 clarification on how to write safe code for time_durations
[SVN r29549]
2005-06-13 11:51:13 +00:00
Jeff Garland 68e74fee37 various updates to date-time docs
[SVN r29538]
2005-06-12 20:53:10 +00:00
Jeff Garland 04aa7bd9b1 couple upgrades to the examples
[SVN r29537]
2005-06-12 20:49:22 +00:00
Jeff Garland 3ff7c8d1d4 jun 9 documentation update for 1.33
[SVN r29505]
2005-06-10 04:17:03 +00:00
Jeff Garland 0230f5d871 updated version of the io tutorial
[SVN r29502]
2005-06-10 03:28:05 +00:00
Jeff Garland 99c989d1da fix problem with use of format/npos
[SVN r29493]
2005-06-09 12:37:13 +00:00
Jeff Garland 8f247814a4 minor tweaks -- documentation only -- no code changes
[SVN r29444]
2005-06-06 10:36:46 +00:00
Jeff Garland fde785ab90 minor documentation update
[SVN r29443]
2005-06-06 10:24:28 +00:00
Rene Rivera c30df89277 Fix serialization condition that archives have to be included first.
[SVN r29426]
2005-06-04 06:40:36 +00:00
Rene Rivera 925b49e7dc Add work around for standard libraries that use local time as the basis of std::time, like the MSL on Windows.
[SVN r29346]
2005-06-01 15:05:06 +00:00
Rene Rivera 08db1dce9e Work around CW-8 problem of considering a T[] incomplete when T is a template type.
[SVN r29344]
2005-06-01 14:19:22 +00:00
Jeff Garland 351d9fcacf tons of documentation updates for the 1.33 release
[SVN r29259]
2005-05-28 18:56:21 +00:00
Jeff Garland fc701ebdf3 some additions to the documentation stuff
[SVN r29258]
2005-05-28 16:34:38 +00:00
Jeff Garland 6596484fb1 minor update to testcase to see if we can figure out why vc8 fails this test
[SVN r29228]
2005-05-26 12:37:49 +00:00
Jeff Garland aadfbadf35 variety of fixes to clean up various compiler warnings -- particularly cw, vc8
[SVN r29189]
2005-05-25 14:16:15 +00:00
Jeff Garland 82db0bf9bc various updates / fixes to examples
[SVN r29185]
2005-05-25 13:34:25 +00:00
Jeff Garland ce98b2ac63 fix for unused parameter warnings
[SVN r29182]
2005-05-25 11:52:24 +00:00
Jeff Garland 394bb9911e fix for microsecond clock -- remove extra call to time which sometimes caused regression failures
[SVN r29181]
2005-05-25 11:28:41 +00:00
Jeff Garland ea0e997bf5 add new test file for local time iterator
[SVN r28940]
2005-05-15 22:05:54 +00:00
Jeff Garland 431cb1cbf4 add new testfile for local time periods
[SVN r28939]
2005-05-15 21:22:10 +00:00
Jeff Garland 61d6ee9a86 add operator- to fix errors in testlocal_time_period.cpp
[SVN r28938]
2005-05-15 21:21:00 +00:00
Jeff Garland 82acf7ac18 add end_of_month_day function doc
[SVN r28937]
2005-05-15 20:55:35 +00:00
Jeff Garland 1f5669aacb initial writeup of changes from 1.32 to 1.33
[SVN r28936]
2005-05-15 20:55:01 +00:00
Jeff Garland 4a2f3352b7 add std:: qualifications to isalpha calls to hopefully fix codewarrior 9.5 regressions
[SVN r28900]
2005-05-14 16:38:28 +00:00
Jeff Garland a9ca8beb87 minor tweaks to try and cleanup como regresssions -- warnings about unreachable code and failure on microsec clock
[SVN r28817]
2005-05-11 13:01:53 +00:00
Jeff Garland d25dab13ef add copyrights to examples
[SVN r28807]
2005-05-11 06:22:09 +00:00
Jeff Garland 85e8d01166 take a shot a fixing como regression failures
[SVN r28755]
2005-05-09 03:37:09 +00:00
Jeff Garland 4ae5fca3ca patches to allow for generation of a date-time only pdf from boost book files
[SVN r28745]
2005-05-08 18:55:39 +00:00
Jeff Garland 2e4f021ab6 take a shot at fixing gcc 4.x compile error for 1.33
[SVN r28709]
2005-05-07 08:49:15 +00:00
Rene Rivera 1beebb2eb5 Fixes for CodeWarrior compilation problems.
* time_facet.hpp; Fix undefined errors because of class method lookups. Needed to use this->* for correct vtable method resolution.
* Jamfile; Make some of the tests specify that they use locale support.


[SVN r28708]
2005-05-07 06:17:24 +00:00
Jeff Garland 94b388e3c9 Changes for i/o fixes -- close some holes. Also rename of timezone to custom tz
[SVN r28630]
2005-05-03 14:27:53 +00:00
Jeff Garland 43839c4d19 Changes to tests for i/o fixes -- close some holes. Also rename of custom timezone
[SVN r28629]
2005-05-03 14:27:05 +00:00
Jeff Garland 898e0a4524 add custom timezone -- just a name change from timezone
[SVN r28628]
2005-05-03 14:14:11 +00:00
Jeff Garland 9992b00c59 updates to fix serialization regression caused by changes to the serialization lib -- macros must now be outside namespace
[SVN r28457]
2005-04-24 05:54:25 +00:00
Jeff Garland d13c4ec9f3 updates to fix serialization regression caused by changes to the serialization lib -- const value is required when archiving
[SVN r28456]
2005-04-24 05:53:01 +00:00
Jeff Garland dd789080fd add local time input facet test
[SVN r28447]
2005-04-24 01:48:19 +00:00
Jeff Garland 54d9cbc1bf fix a problem where in STD_CONFIG mode we don't handle the case where a time duration of over 24 hours is constructed. Change adds appropriate amounts to the date. Added tests to validate this is working correctly
[SVN r28446]
2005-04-24 01:36:25 +00:00
Jeff Garland 83b9057a68 fix a problem where in STD_CONFIG mode we don't handle the case where a time duration of over 24 hours is constructed. Change adds appropriate amounts to the date.
[SVN r28445]
2005-04-24 01:35:19 +00:00
Jeff Garland b0f888e7b6 fix error with setting month strings -- caused off by one month error
[SVN r28442]
2005-04-23 21:16:06 +00:00
Jeff Garland 7635f9334d add facet tests the check setting of name strings
[SVN r28441]
2005-04-23 21:15:06 +00:00
Jeff Garland dd0c9127e0 test updates for local time input streaming
[SVN r28434]
2005-04-23 05:41:08 +00:00
Jeff Garland 9bec7b8111 patches to enable local time input streaming
[SVN r28433]
2005-04-23 05:39:52 +00:00
Rene Rivera 1d5b9be500 Fix bjam error when Spirit is not found, which is required for use of Boost.Serialization.
[SVN r28346]
2005-04-20 22:06:17 +00:00
Jeff Garland ad38989a3a series of changes to support input/output for time zones
[SVN r28304]
2005-04-17 21:49:11 +00:00
Jeff Garland 908e14ae23 docs for bunch o changes for time zone printing
[SVN r28303]
2005-04-17 21:40:17 +00:00
Jeff Garland 792631d009 fix documentation so that time durations are all spelled out
[SVN r28302]
2005-04-17 21:33:34 +00:00
Jeff Garland b695e765a5 enhance the tz example code with no dst timezone
[SVN r28301]
2005-04-17 21:29:26 +00:00
Jeff Garland 8966d8b567 add documentation for day_of_year() functions
[SVN r28300]
2005-04-17 21:28:10 +00:00
Jeff Garland ad9ab4c15e fix a metrowerks warning about returning an int instead of short
[SVN r28299]
2005-04-17 21:10:54 +00:00
Jeff Garland a47da49ee9 add an end string char -- perhaps fix vc regressions
[SVN r28283]
2005-04-16 18:59:51 +00:00
Jeff Garland 8b5a417459 make changes to eliminate most of the lexical_casts in the code -- hopefully this will help codewarrior 8.3 errors
[SVN r28181]
2005-04-12 15:04:33 +00:00
Jeff Garland 68a03f5ec9 fix warning on code warrior about implict conversion from int
[SVN r28177]
2005-04-12 13:16:24 +00:00
Jeff Garland f9c5429756 portability changes for sunpro with new i/o code
[SVN r28176]
2005-04-12 13:01:53 +00:00
Jeff Garland 22953c181c narrow down the string_algo includes to hopefully work around error in code warrior -- make compiles faster
[SVN r28175]
2005-04-12 12:47:46 +00:00
Jeff Garland 6304827f3a changes to test to support format-based input of time types. For example: %Y-%M-%D %H:%M:%S - new testfile posix_time/testtime_input_facet.cpp
[SVN r28141]
2005-04-12 02:56:45 +00:00
Jeff Garland 3257d1297a changes to support format-based input of time types. For example: %Y-%M-%D %H:%M:%S
[SVN r28140]
2005-04-12 02:55:04 +00:00
Jeff Garland 9e7902c79e change the compiler macros to enable new fancy i/o for metrowerks compiler
[SVN r28092]
2005-04-10 23:53:08 +00:00
Jeff Garland 44fec40c5f clear up some test errors for compilers that don't support the new 1.33 fancy i/o facts
[SVN r28091]
2005-04-10 23:47:38 +00:00
Jeff Garland 23f9750b7a open up mingw to new i/o code -- will hopefully fix some of the current mingw regressions
[SVN r28090]
2005-04-10 23:07:24 +00:00
Jeff Garland 971a9cc630 add date-time serialization tests to the standard suite of tests
[SVN r28083]
2005-04-10 18:07:52 +00:00
Jeff Garland 5b47132eb5 call atoi via std:: -- hopefully fix some metrowerks 9.4 regressions
[SVN r28070]
2005-04-09 16:05:16 +00:00
Jeff Garland 2624ed0a45 fix construct from clock example -- universal_day to universal_time
[SVN r28069]
2005-04-09 15:48:47 +00:00
Jeff Garland 9eed73ddd6 replace facet io with simplified form that will hopefully reverse regressions on compilers like mingw
[SVN r27996]
2005-04-06 02:16:07 +00:00
Jeff Garland bf47dadf80 fix uninitialized variable problem
[SVN r27995]
2005-04-06 01:15:20 +00:00
Jeff Garland faa1bdc2f9 fix up a couple of casts to the correct types
[SVN r27951]
2005-04-04 11:05:30 +00:00
Jeff Garland dbe8af4393 add test for truncating extra digits when parsing time duration instead of taking the last n digits incorrectly
[SVN r27936]
2005-04-02 17:58:58 +00:00
Jeff Garland ea0f30f26e truncate extra digits when parsing time duration instead of taking the last n digits incorrectly
[SVN r27935]
2005-04-02 17:57:45 +00:00
Jeff Garland 823e263e51 add information related to truncation of digits on time parsing
[SVN r27934]
2005-04-02 17:55:49 +00:00
Jeff Garland 2821d374ea fix code warrior 9_3 warning about int to short conversions
[SVN r27886]
2005-03-30 16:09:46 +00:00
Jeff Garland c346cce82f serialization fixes for gcc 3.4
[SVN r27883]
2005-03-30 14:13:11 +00:00
Jeff Garland 116b195367 add mingw to the list of compilers not supporting reentrant function calls
[SVN r27881]
2005-03-30 13:22:50 +00:00
Jeff Garland 96eac159dc getting the reentrant function macro logic right -- hopefully
[SVN r27866]
2005-03-29 14:36:04 +00:00
Jeff Garland 1f31372e84 prevent the reentrant versions of std lib clock functions from use with metrowerks compiler
[SVN r27865]
2005-03-29 12:22:51 +00:00
Jeff Garland 6f1a591083 add some code comments -- constructor for formatter
[SVN r27860]
2005-03-28 14:27:09 +00:00
Jeff Garland 821d9bce88 add include of gregorian/conversion.hpp so header will stand alone
[SVN r27818]
2005-03-27 15:57:35 +00:00
Jeff Garland 82fbd7f7df next round of major updates to format-based input-output. Adds various parsers to support full date input
[SVN r27797]
2005-03-24 13:07:42 +00:00
Jeff Garland c4167b847e fix define for multi-threaded posix builds -- remove parens from macro defines
[SVN r27752]
2005-03-21 11:13:02 +00:00
Jeff Garland 40fc786a46 disable the reentrant calls when MSC_VER is defined -- should fix regressions on windows compilers temporarily while we figure out why it works here, but not in regression land
[SVN r27747]
2005-03-20 16:41:07 +00:00
Jeff Garland f88d8130a5 fixes related to reentrant function calls on posix (localtime_r)
[SVN r27744]
2005-03-19 21:39:59 +00:00
Jeff Garland aac4bbfd98 changes for vc7 failure related to shared_ptr compares
[SVN r27743]
2005-03-19 18:42:14 +00:00
Jeff Garland b03be5374f replace time_ with this->time_ to hopefully fix gcc regression failures
[SVN r27658]
2005-03-15 04:29:08 +00:00
Jeff Garland 527c482a9f put in a fix to retry if the tz_database file cannot be found -- this should fix regression tests that are run from boost/status directory
[SVN r27635]
2005-03-13 19:49:35 +00:00
Jeff Garland 46a8a6c4f5 refactor the implementation of has_dst to remove the a flag and hopefully allow this code to compile on vc7
[SVN r27634]
2005-03-13 19:29:20 +00:00
Jeff Garland b88926bc0d fix gcc3_4 lookup errors for protected data member time_ by adding this->time_ to subclass
[SVN r27633]
2005-03-13 19:16:22 +00:00
Jeff Garland ba33687a2b fix bug 1155556 which reports failure in the case of an empty string sent to from_simple_string
[SVN r27624]
2005-03-12 20:44:55 +00:00
Jeff Garland e71ce4bf36 add empty string test for bug 1155556 which reports failure in the case of an empty string sent to from_simple_string
[SVN r27623]
2005-03-12 20:44:03 +00:00
Jeff Garland 174bea2604 added new date parsing tests to go along with updates to date parsing code including new tokenizer stuff
[SVN r27622]
2005-03-12 20:30:09 +00:00
Jeff Garland a62c95047c fix for failures on gcc3.x on Solaris -- apparently on that platform there is a macro that defines sun == 1 -- unbelievable...
[SVN r27618]
2005-03-12 03:56:24 +00:00
Jeff Garland b880f4c50a add st louis entry
[SVN r27617]
2005-03-12 03:31:35 +00:00
Jeff Garland c6292bcabc fix test so it can find tz csv file when run from regression directory
[SVN r27563]
2005-03-07 03:53:44 +00:00
Victor A. Wagner Jr. 7971e6658a Changed - some &*somestdstring.end() to &*somestdstring.begin+somestdstring.size()
since dereferencing ....end() is undefined
          I realize that most optimizers will do away with the dereference, but some
          debugging libraries won't (in particular VC8.0)


[SVN r27549]
2005-03-04 06:52:10 +00:00
Jeff Garland 09fc884f2d make output of generators have a 2 digit day in all cases
[SVN r27488]
2005-02-23 10:07:53 +00:00
Jeff Garland 09bfa592a6 add in the local time tests
[SVN r27456]
2005-02-20 22:47:44 +00:00
Jeff Garland 0aab889bfe fix metroworks and other regressions as a result of multiple definitions of the 1_33_facet_io macro -- in some cases it's defined in the JAMFILE so we don't want to redefine here
[SVN r27435]
2005-02-19 22:26:19 +00:00
Jeff Garland c5d45806bd Change test to reinit the last variable before the universal_time loop so that failures in some test setups are fixed. Should fix regression errors before 1.33
[SVN r27409]
2005-02-17 13:52:25 +00:00
Jeff Garland 965643e13f Fix problems with gcc 3.4 and 4.x compiles by adding this-> to protected member access
[SVN r27405]
2005-02-16 13:04:40 +00:00
Jeff Garland 32d0fd2cd1 make division operator const
[SVN r27404]
2005-02-16 13:03:38 +00:00
Jeff Garland 8b48ef6483 changes to support new io facets
[SVN r27359]
2005-02-13 20:50:37 +00:00
Jeff Garland 039d89c800 update exceptions for local time code
[SVN r27355]
2005-02-13 19:51:27 +00:00
Jeff Garland bec5356557 add various julian date tests for posix timezones
[SVN r27354]
2005-02-13 19:50:25 +00:00
Jeff Garland 7b2035e21f fix regression failures due to new univ time tests that were added
[SVN r27352]
2005-02-13 19:12:42 +00:00
Jeff Garland f4038f5df4 change the i/o to not be included if pre_133 macro is set
[SVN r27351]
2005-02-13 19:11:14 +00:00
Jeff Garland 462c4f4112 change storage for default strings over to individual chars to avoid redefinition problems
[SVN r27350]
2005-02-13 19:09:50 +00:00
Jeff Garland c812fbed5a remove zone_abbrev function
[SVN r27349]
2005-02-13 19:08:51 +00:00
Jeff Garland f060e8752a fix errors in compiler config due to bad patch
[SVN r27339]
2005-02-13 02:38:32 +00:00
Jeff Garland 8c7d41bd85 fixes for regressions on old compilers after check-in of new facet code
[SVN r27309]
2005-02-10 15:17:01 +00:00
Jeff Garland aadbd5f054 massive doc update for local_time changes
[SVN r27002]
2005-02-02 03:05:39 +00:00
Jeff Garland 1981aae5ba update to jamfile and localization
[SVN r27001]
2005-02-02 02:39:19 +00:00
Jeff Garland 1db70c3342 mostly doc updates -- a few minor typedefs and such for local time
[SVN r27000]
2005-02-02 02:34:46 +00:00
Jeff Garland 3683b78bd7 add local time examples
[SVN r26999]
2005-02-02 02:14:09 +00:00
Jeff Garland 3295744a1a updated diagram
[SVN r26998]
2005-02-02 02:11:00 +00:00
Jeff Garland f18f2ddeff add new legacy io file -- fix broken regression tests
[SVN r26984]
2005-02-01 03:15:16 +00:00
Jeff Garland 31383c0c8e series of test changes associated with new facet code
[SVN r26941]
2005-01-30 21:04:49 +00:00
Jeff Garland 94de717857 large series of changes associated with revamped facet code
[SVN r26940]
2005-01-30 20:58:52 +00:00
Stefan Slapeta faf814d4e1 check bad leap year from string
[SVN r26860]
2005-01-27 11:09:50 +00:00
Stefan Slapeta d9a4057d06 Added bad leap year test
[SVN r26859]
2005-01-27 11:08:55 +00:00
Jeff Garland a62d8b80c9 fix vc6 failure -- bad scoping rules on that compiler - fix patch
[SVN r26841]
2005-01-25 01:29:24 +00:00
Jeff Garland 5783232967 fix vc6 failure -- bad scoping rules on that compiler
[SVN r26840]
2005-01-25 01:26:21 +00:00
Jeff Garland 2c22145a5b changes to build Jamfile to support new i/o facets
[SVN r26819]
2005-01-23 15:59:49 +00:00
Jeff Garland 8da8b543ab updates to enable universal_time for windows platforms
[SVN r26812]
2005-01-22 19:16:03 +00:00
Jeff Garland 678e87764f updates to enable universal_time for windows tests
[SVN r26811]
2005-01-22 19:15:38 +00:00
Jeff Garland fff2e8e38d add in a universal time extension for gettimeofday clocks
[SVN r26805]
2005-01-22 16:33:48 +00:00
Jeff Garland 70ccb62a4c add in a test to run the universal time extension
[SVN r26804]
2005-01-22 16:32:45 +00:00
Jeff Garland f82a252c95 add full name tests for tz database - part of 11-03 io patchset
[SVN r26660]
2005-01-10 04:12:31 +00:00
Jeff Garland f5fcfac64c add new local streaming tests -- part of 11-03 io patchset
[SVN r26659]
2005-01-10 04:11:33 +00:00
Jeff Garland 021b754074 changes to add local_time io -- 11-03 io patchset
[SVN r26658]
2005-01-10 00:29:14 +00:00
Jeff Garland 09b747bb1c add new tests for local time facet 11-03 IO patchset
[SVN r26657]
2005-01-10 00:27:35 +00:00
Jeff Garland 94591c956a updates for the 11-03 i/o patchset
[SVN r26656]
2005-01-10 00:14:09 +00:00
Jeff Garland 5505ebb621 add as part of the 11-03 io patchset
[SVN r26655]
2005-01-09 23:24:05 +00:00
Jeff Garland a3463b52bc fix for VC7 regression change
[SVN r26654]
2005-01-09 23:13:54 +00:00
Jeff Garland b27dfd4666 add additional tests
[SVN r26653]
2005-01-09 23:06:20 +00:00
Jeff Garland c4ec04ca2a new local time stuff from 11-03 patchset
[SVN r26652]
2005-01-09 22:52:50 +00:00
Jeff Garland 5c85586294 various changes from 11_03_2004 patch set
[SVN r26651]
2005-01-09 20:37:36 +00:00
Jeff Garland dcaf8594e1 first version of operators
[SVN r26650]
2005-01-09 20:23:48 +00:00
Jeff Garland c0c724e6dd add comment regarding static cast
[SVN r26469]
2004-12-07 11:00:12 +00:00
Jeff Garland 389747604e apply sunpro patch from caleb epstein
[SVN r26468]
2004-12-07 10:52:50 +00:00
Jeff Garland 79797814ad fix documentation of TIME_STD_CONFIG macro -- reverse polarity of description
[SVN r26437]
2004-12-06 02:13:52 +00:00
Jeff Garland 0202d24f66 fix various vc7.x warnings
[SVN r26436]
2004-12-06 02:07:52 +00:00
Jeff Garland c584da75f3 fix vc7.x warnings
[SVN r26435]
2004-12-06 02:01:32 +00:00
Jeff Garland 10aad83bd6 fix potential loss of resolution on conversion
[SVN r26434]
2004-12-06 01:54:20 +00:00
Jeff Garland af9cfeac5e fix windows min/max macro clash problem
[SVN r26401]
2004-12-02 13:48:17 +00:00
Victor A. Wagner Jr. 200d17fd13 Added - #include "boost/shared_ptr.hpp"
so the user doesn't have to.


[SVN r26392]
2004-12-01 15:50:05 +00:00
Aleksey Gurtovoy 447077e0c8 merge RC_1_32_0 fixes
[SVN r26328]
2004-11-28 03:35:12 +00:00
Aleksey Gurtovoy d76afc09e4 merge RC_1_32_0 tab fixes
[SVN r26327]
2004-11-28 03:27:25 +00:00
Jeff Garland d43895dfea add new tests for clocks
[SVN r26114]
2004-11-04 12:45:07 +00:00
Jeff Garland cf90ddbda3 fix bug with multiple license statements
[SVN r26113]
2004-11-04 12:43:39 +00:00
Jeff Garland 02e78e9bb7 add method for local times
[SVN r26111]
2004-11-04 12:40:37 +00:00
Jeff Garland 950d235994 remove date template parameter from clock type
[SVN r26110]
2004-11-04 12:38:54 +00:00
Jeff Garland 245fcbe19c add clock stuff for local_times
[SVN r26109]
2004-11-04 12:37:55 +00:00
Jeff Garland fe49e0bfd3 merge fix from 1.32 release branch
[SVN r26108]
2004-11-04 12:28:49 +00:00
Jeff Garland 797214ef7d restore deleted png file
[SVN r26065]
2004-11-01 21:18:54 +00:00
Jeff Garland 835af017ee 1st version of format based time output
[SVN r25720]
2004-10-14 02:43:34 +00:00
Jeff Garland 90a28a5988 new format-based time formatter core
[SVN r25719]
2004-10-14 02:42:09 +00:00
Jeff Garland 5f545d33fc add new format based date facet code
[SVN r25718]
2004-10-14 00:05:56 +00:00
Jeff Garland 57280ba606 first version of format-based date facet code
[SVN r25717]
2004-10-14 00:04:34 +00:00
Jeff Garland b4f82b8eee attempt to fix crashes due to locale mem handling on various platforms
[SVN r25716]
2004-10-13 20:44:37 +00:00
Jeff Garland 54111584c9 first version of a clock test for local times
[SVN r25715]
2004-10-13 18:56:29 +00:00
Jeff Garland 5ab9ac8eba make utc time type available for clients
[SVN r25714]
2004-10-13 18:40:02 +00:00
Jeff Garland a93beae7e7 include posix_time since we depend on it
[SVN r25713]
2004-10-13 18:39:15 +00:00
Jeff Garland 052553503c add test code for the strings_from_facet.hpp functions
[SVN r25695]
2004-10-12 22:27:14 +00:00
Jeff Garland 32954414b1 enhanced tests for changes to to_tm functions
[SVN r25618]
2004-10-07 22:30:16 +00:00
Jeff Garland ade6682a9a various changes to tm conversion functions for local_time support
[SVN r25617]
2004-10-07 22:28:21 +00:00
Jeff Garland c649f13a92 1st version of test file for format-based date parser
[SVN r25616]
2004-10-07 21:47:43 +00:00
Jeff Garland 97df759fb5 first version of format-based parsing engine
[SVN r25615]
2004-10-07 21:40:53 +00:00
Jeff Garland beb447b6d6 minor commenting fixes
[SVN r25614]
2004-10-07 21:05:04 +00:00
Jeff Garland 8f2c5d0ecd initial version of functions to pull month and weekdays from a facet
[SVN r25613]
2004-10-07 21:02:33 +00:00
Jeff Garland 21f35fcb5b fix spelling in example
[SVN r25580]
2004-10-06 14:11:25 +00:00
Aleksey Gurtovoy 3009081c27 c++boost.gif -> boost.png replacement
[SVN r25573]
2004-10-05 15:45:52 +00:00
Jeff Garland fecb89c9f5 add generic put period template function
[SVN r25545]
2004-10-04 00:00:42 +00:00
Jeff Garland 454277023d files for facet rewrite
[SVN r25544]
2004-10-03 23:28:49 +00:00
Jeff Garland fb6fdb1709 various updates for changes made prior to 1.32
[SVN r25543]
2004-10-03 21:09:14 +00:00
Jeff Garland 8a472229cc fix bug in time duration parsing where fractional digits would be incorrect
[SVN r25537]
2004-10-03 14:59:25 +00:00
Jeff Garland 856addc8fb new constructor tests and gobs of other stuff
[SVN r25526]
2004-10-02 18:53:28 +00:00
Jeff Garland dab9c8da43 various updates for local_time system
[SVN r25525]
2004-10-02 18:49:16 +00:00
Jeff Garland 41c5641e26 tests for new tm conversion functions
[SVN r25522]
2004-10-01 23:17:31 +00:00
Jeff Garland 9cd73d687c added tm conversion functions
[SVN r25521]
2004-10-01 23:17:02 +00:00
Jeff Garland 9c838d673b cleanup tm test changes
[SVN r25520]
2004-10-01 23:08:56 +00:00
Jeff Garland 3e79cacead new tests for tm conversion code
[SVN r25519]
2004-10-01 22:52:48 +00:00
Jeff Garland 9acddb2511 add conversion to tm functions
[SVN r25518]
2004-10-01 22:50:42 +00:00
Jeff Garland 502ea0be0b add change for ptime min/max construction to change notes
[SVN r25496]
2004-10-01 02:54:36 +00:00
Jeff Garland e5ab27b9c4 add tests for ptime min/max_date_time constructors
[SVN r25495]
2004-10-01 02:30:47 +00:00
Jeff Garland fbf8417e5c fix the ptime max/min date constructors
[SVN r25494]
2004-10-01 02:29:49 +00:00
Jeff Garland 83e4e6951f fix copyright
[SVN r25056]
2004-09-13 16:44:10 +00:00
Jeff Garland 33292a72d4 changes to reduce filenames below 32 chars
[SVN r25053]
2004-09-13 15:56:25 +00:00
Jeff Garland d20bccf25e add function to return end of month from a date
[SVN r25015]
2004-09-10 23:09:50 +00:00
Jeff Garland c9ec79739f fix date-time serialization to deal with change to SPLIT_FREE macro
[SVN r24981]
2004-09-09 00:19:18 +00:00
Jeff Garland 12d162eeb9 add readme file
[SVN r24962]
2004-09-07 21:24:18 +00:00
Jeff Garland 300351689d various sept 5 updates
[SVN r24961]
2004-09-07 21:23:18 +00:00
Jeff Garland 46ad604c88 various updates sept 05
[SVN r24960]
2004-09-07 21:09:03 +00:00
Jeff Garland e5212e79eb fix code warrior regression problem - get rid of macro stuff
[SVN r24881]
2004-09-02 21:10:37 +00:00
Jeff Garland 2b8a54a05a first versions of local_time tests
[SVN r24861]
2004-09-02 04:21:30 +00:00
Jeff Garland 9d5addacb8 first version of tz database data
[SVN r24860]
2004-09-02 04:19:36 +00:00
Jeff Garland 7967d77192 initial version of local time capabilities
[SVN r24859]
2004-09-02 04:16:18 +00:00
Jeff Garland 296c90df0d 1st version of local time files
[SVN r24858]
2004-09-02 04:07:28 +00:00
Jeff Garland ce3d531e5e fix copyright
[SVN r24856]
2004-09-02 01:31:54 +00:00
Jeff Garland 136c22ef57 additional copyright updates, Jamfile fix
[SVN r24854]
2004-09-01 16:51:49 +00:00
Jeff Garland 6e380e3a31 add copyright / license statements to all xml files
[SVN r24830]
2004-08-30 17:58:38 +00:00
Jeff Garland 76cf5446d9 changes to fix vc7.1 compile problem
[SVN r24812]
2004-08-29 19:31:12 +00:00
Jeff Garland 473f8bc215 fix regression failures for some compilers
[SVN r24811]
2004-08-29 18:59:15 +00:00
Jeff Garland 716336bbb4 removing legacy html docs -- not converted to boost-book xml
[SVN r24810]
2004-08-29 17:56:47 +00:00
Jeff Garland 45dfa84bda fix gcc warnings
[SVN r24792]
2004-08-27 23:30:30 +00:00
Jeff Garland 84333ae50e various documentation cleanups
[SVN r24516]
2004-08-16 22:05:14 +00:00
Jeff Garland 61cd10c7e3 update doxygen comments
[SVN r24515]
2004-08-16 21:59:53 +00:00
Stefan Slapeta 9fd48fcf10 pow() ambiguity resolved
[SVN r24501]
2004-08-16 13:16:01 +00:00
Stefan Slapeta 5b27258c0b Test datetime with BOOST_ALL_NO_LIB
[SVN r24495]
2004-08-16 09:05:42 +00:00
Stefan Slapeta ecf45ee1db std namespace fix
[SVN r24488]
2004-08-15 20:12:49 +00:00
Jeff Garland 25ec632a14 cleanup macros
[SVN r24355]
2004-08-09 15:58:31 +00:00
Jeff Garland f95bc451ff various doc changes including std_config cleanup, fixup of includes for posix time times
[SVN r24354]
2004-08-09 15:55:09 +00:00
Jeff Garland 9f2cb94b43 simplification of build uneeded build macros for library
[SVN r24353]
2004-08-09 15:03:30 +00:00
Jeff Garland c05b51d43d small updates to fix warnings, make mingw cross-compiles work
[SVN r24305]
2004-08-05 15:58:59 +00:00
Jeff Garland 6971a0a694 add ftime function for win32
[SVN r24304]
2004-08-05 14:29:28 +00:00
Jeff Garland 2895c56757 add new tests for filetime functions
[SVN r24297]
2004-08-04 22:29:08 +00:00
Jeff Garland dbaf5dadb9 document updates for new ftime function
[SVN r24296]
2004-08-04 22:23:59 +00:00
Jeff Garland fbb6724e34 add test for new filetime functions
[SVN r24295]
2004-08-04 22:12:05 +00:00
Jeff Garland 372e67c4c0 add new ftime function for windows
[SVN r24293]
2004-08-04 22:06:05 +00:00
Jeff Garland 35657ae6ed cleaned up version of microsecond time clock implementation including support for ftime (win32)
[SVN r24273]
2004-08-03 18:39:14 +00:00
Jeff Garland 3cda2cc5be allow microsecond clock on windows
[SVN r24241]
2004-08-01 21:25:01 +00:00
Jeff Garland f96d2d6eb7 updates to allow microsecond clock on Win32
[SVN r24240]
2004-08-01 21:23:45 +00:00
Rene Rivera 535c9262a4 Add conditional support for std::locale, for toolsets like CW8 which require special setup for that support.
[SVN r24232]
2004-08-01 14:50:32 +00:00
Jeff Garland c9c302df63 fixes to reference guide to take out duplicate typdefs after doug patch - july 25
[SVN r24054]
2004-07-25 23:53:20 +00:00
Jeff Garland 2510dc1874 fix licensing in files
[SVN r24017]
2004-07-25 02:55:31 +00:00
Jeff Garland e016287186 fixes fror xml serialization
[SVN r23953]
2004-07-22 12:58:43 +00:00
Jeff Garland 37e6d6cc04 clean up licensing statement
[SVN r23925]
2004-07-22 01:35:15 +00:00
Jeff Garland 131c72ebcd update examples
[SVN r23924]
2004-07-22 01:34:03 +00:00
Jeff Garland 55bbae6806 various doc updates
[SVN r23923]
2004-07-22 01:32:40 +00:00
Jeff Garland ebf89f3e77 update change information
[SVN r23922]
2004-07-22 01:31:48 +00:00
Jeff Garland 11fccff25e fix spelling in comments
[SVN r23901]
2004-07-21 14:22:53 +00:00
Jeff Garland 7cee02385f update for patch
[SVN r23872]
2004-07-21 03:21:13 +00:00
Jeff Garland b5a96e031a fix serialization code
[SVN r23871]
2004-07-21 03:09:47 +00:00
Douglas Gregor cbef298ff1 Documentation update from Jon T. Pedant
[SVN r23847]
2004-07-20 17:03:55 +00:00
Jeff Garland 76bdb1c1fc fix copyright / license issues
[SVN r23815]
2004-07-19 22:13:17 +00:00
Vladimir Prus 93bfb202e6 More V2 Jamfile tweaks.
[SVN r23764]
2004-07-19 07:12:45 +00:00
Jeff Garland 4e7377cff8 fix for facet problem with vc7x compilers when used with dll--updated tests
[SVN r23739]
2004-07-18 23:38:07 +00:00
Jeff Garland d8e03bfcc7 fix for facet problem with vc7x compilers when used with dll
[SVN r23738]
2004-07-18 23:37:41 +00:00
Jeff Garland f11a00a212 addtional time special value tests
[SVN r23737]
2004-07-18 23:20:08 +00:00
Jeff Garland 09dbdae01f change to use the new gregorian operators
[SVN r23736]
2004-07-18 23:15:15 +00:00
Jeff Garland d2a21d7637 change BOOST_NO_WCHAR to BOOST_NO_WSTRING in detecting lack of wide string support
[SVN r23732]
2004-07-18 18:36:18 +00:00
Jeff Garland 0417c47bae update Jamfile testnames to match with status xml results
[SVN r23731]
2004-07-18 18:32:23 +00:00
Jeff Garland 3213dd494f improve support for zero length periods
[SVN r23729]
2004-07-18 16:20:56 +00:00
Jeff Garland b30b80cb50 add generic period test suite
[SVN r23728]
2004-07-18 16:20:21 +00:00
Jeff Garland 9bdf39be02 force test to fail for platforms that don't support ms clock
[SVN r23727]
2004-07-18 16:01:12 +00:00
Jeff Garland 0991815019 fix jamfile to shorten filenames
[SVN r23726]
2004-07-18 15:56:26 +00:00
Jeff Garland 0aa38b0621 check in improved exception handling so regression tests are stopped by stream in failures
[SVN r23716]
2004-07-17 23:42:25 +00:00
Jeff Garland b4eb06cd05 detabify -- change to BOOST_NO_WSTRING
[SVN r23713]
2004-07-17 23:03:48 +00:00
Jeff Garland af4ba244fc remove tabs from source files
[SVN r23712]
2004-07-17 22:24:40 +00:00
Jeff Garland bb6f2cbc1e fix file names > 31 chars
[SVN r23710]
2004-07-17 22:08:32 +00:00
Jeff Garland e5567ab0b4 example.7-12 patch from bart
[SVN r23693]
2004-07-17 15:38:39 +00:00
Jeff Garland 7aaa215d3b borland test streams fix
[SVN r23686]
2004-07-17 15:01:22 +00:00
Jeff Garland 7025a5f212 switch to boost-book
[SVN r23658]
2004-07-17 02:47:23 +00:00
Jeff Garland 14ea07a5f1 improve mac regression - quickfix
[SVN r23554]
2004-07-14 16:29:00 +00:00
Jeff Garland 183851cc85 force borland to use old output headers
[SVN r23523]
2004-07-14 01:57:21 +00:00
Jeff Garland 8fe514be11 remove duplicated macro stuff
[SVN r23445]
2004-07-11 18:27:40 +00:00
Jeff Garland 61ccbde085 code cleanup patch
[SVN r23444]
2004-07-11 18:18:27 +00:00
Jeff Garland 848bfac50d mac_fix_plus patch set for regressions from bart - 7.09
[SVN r23443]
2004-07-11 18:13:21 +00:00
Jeff Garland 3de5a6118d fixes for error in regression check
[SVN r23440]
2004-07-11 16:43:38 +00:00
Jeff Garland e263e5f2fd windows regression fixes - 7.05
[SVN r23357]
2004-07-06 01:46:40 +00:00
Jeff Garland 6fede05b10 fix regression issues with facet
[SVN r23355]
2004-07-06 00:42:15 +00:00
Jeff Garland c3159ed981 config changes for new gregorian types
[SVN r23354]
2004-07-06 00:02:23 +00:00
Jeff Garland 83eadf93f1 july 2 doc patches
[SVN r23342]
2004-07-05 00:17:55 +00:00
Jeff Garland b84df08623 added code for time input streaming
[SVN r23338]
2004-07-04 21:59:17 +00:00
Jeff Garland 42d61df6e0 added tests for time input streaming
[SVN r23337]
2004-07-04 21:58:13 +00:00
Jeff Garland db85b0a744 fixes for year functor
[SVN r23336]
2004-07-04 18:41:21 +00:00
Jeff Garland 50740c8b49 fixes for missing inlines on operators
[SVN r23335]
2004-07-04 16:43:23 +00:00
Jeff Garland d0d87f8050 fix Jamfile which was checked in accidently with non-existent tests
[SVN r23319]
2004-07-03 00:02:56 +00:00
Jeff Garland edfead56f4 produce failures for compilers that don't support wide string and locale properly
[SVN r23295]
2004-07-01 03:06:49 +00:00
Jeff Garland 5297335ca9 changes to support date input streaming and wide chars
[SVN r23294]
2004-07-01 02:47:42 +00:00
Jeff Garland cd95e12062 date input streaming and wide stream changees
[SVN r23293]
2004-07-01 02:45:18 +00:00
Jeff Garland 077be45205 changes for date input streaming
[SVN r23292]
2004-07-01 02:27:04 +00:00
Jeff Garland e3cb62754a add in tests for experimental greg_duration types
[SVN r23277]
2004-06-30 01:00:22 +00:00
Jeff Garland 327ec13e47 enable the experimental gregorian duration types
[SVN r23276]
2004-06-30 00:47:47 +00:00
Jeff Garland 30dd302f5c add testfile for experimental gregorian duration types
[SVN r23275]
2004-06-30 00:45:29 +00:00
Jeff Garland b9f4a17d6b add tests for experimental duration types
[SVN r23274]
2004-06-30 00:38:12 +00:00
Jeff Garland 7259f49533 modifications to support experimental gregorian duration types
[SVN r23273]
2004-06-30 00:27:35 +00:00
Jeff Garland ca9cd67304 add new gregorian duration types into posix time
[SVN r23272]
2004-06-30 00:11:11 +00:00
Jeff Garland 396d237e90 provide optional support for gregorian duration types
[SVN r23271]
2004-06-30 00:01:20 +00:00
Jeff Garland e8e29dcc00 add serialization test code
[SVN r23270]
2004-06-29 22:22:56 +00:00
Jeff Garland 0cfe74866c add serialization code for posix time
[SVN r23269]
2004-06-29 22:21:14 +00:00
Jeff Garland 2acf121fb1 add serialization example
[SVN r23268]
2004-06-29 22:18:53 +00:00
Jeff Garland ea7ab68a48 variety of changes to modernize examples to use newer library interfaces and various cleanup
[SVN r23267]
2004-06-29 20:29:53 +00:00
Jeff Garland 4e8d8f57f5 simplification of examples
[SVN r23266]
2004-06-29 18:40:56 +00:00
Jeff Garland 74a2cc77c7 changes for default constructors
[SVN r23265]
2004-06-29 16:43:39 +00:00
Jeff Garland 04e95788fd changes to support default constructors
[SVN r23264]
2004-06-29 16:41:04 +00:00
Jeff Garland 0b7cdb3930 add polymorphic base type defintion for date generators
[SVN r23263]
2004-06-29 16:29:21 +00:00
Jeff Garland 645966a844 minor doc updates from Bart
[SVN r23262]
2004-06-29 16:23:35 +00:00
Jeff Garland 531428121a initial version of xml docs
[SVN r23219]
2004-06-28 00:07:55 +00:00
Jeff Garland fef15f220c add types for new date generator functions
[SVN r22975]
2004-05-30 15:48:22 +00:00
Jeff Garland 8c42b6a80f add test for new date generator functions
[SVN r22974]
2004-05-30 15:46:49 +00:00
Vladimir Prus e5ef645c01 Sync with V1
[SVN r22803]
2004-05-12 11:12:47 +00:00
Jeff Garland ff2404a7b7 add iso_from function
[SVN r22661]
2004-04-18 20:30:51 +00:00
Jeff Garland aba0b3d378 additional tests for year_iterator
[SVN r22660]
2004-04-18 19:36:10 +00:00
Jeff Garland e2fb13a350 fix for feb29th corner case with year_iterator
[SVN r22659]
2004-04-18 19:35:25 +00:00
Jeff Garland 7ab37b1489 fix for min/max date constructors
[SVN r22644]
2004-04-17 20:46:12 +00:00
Jeff Garland b4b43fae6a fix for min/max date constructors
[SVN r22643]
2004-04-17 20:41:10 +00:00
Jeff Garland 7cfd84f434 additional tests to exercise ptime special values constructor
[SVN r22591]
2004-04-03 23:21:03 +00:00
Jeff Garland af4f6424be fix the posix_time constructor to accept special values
[SVN r22590]
2004-04-03 23:20:34 +00:00
Jeff Garland f78a609709 remove wide string support from Borland 5.64
[SVN r22446]
2004-03-06 23:40:20 +00:00
Jeff Garland 5294032944 fix min/max names - thx to Steve Robbins
[SVN r22444]
2004-03-06 14:46:06 +00:00
Jeff Garland 4ae0c51316 first round of changes to support input streaming
[SVN r22413]
2004-03-01 02:11:31 +00:00
Jeff Garland c627cb8f82 first round of changes for input streaming of dates
[SVN r22412]
2004-03-01 02:11:04 +00:00
Jeff Garland f1cb8ba336 attempt to fix regression errors by disabling wstring on cygwin
[SVN r22404]
2004-02-28 19:51:59 +00:00
Eric Niebler 058431aed0 remove minmax hack from win32.hpp and fix all places that could be affected by the minmax macros
[SVN r22394]
2004-02-26 18:27:02 +00:00
Jeff Garland fa299bb703 changes to support wide stream output
[SVN r22274]
2004-02-15 16:43:50 +00:00
Jeff Garland ffd02f547d additional tests for wide string output
[SVN r22273]
2004-02-15 16:42:50 +00:00
Jeff Garland 7996611fbf tests for wstring output
[SVN r22272]
2004-02-15 16:36:41 +00:00
Jeff Garland 283455973c fixes for wstring output
[SVN r22271]
2004-02-15 16:34:37 +00:00
Jeff Garland 0c047d46c0 changes to support wide string output
[SVN r22270]
2004-02-15 16:28:07 +00:00
Jeff Garland ba361a0de2 add file for wstring output -- supports broken compilers
[SVN r22269]
2004-02-15 16:18:21 +00:00
Jeff Garland b8e1a2ca30 move time_formatters_limited to correct location
[SVN r22268]
2004-02-15 16:16:52 +00:00
Jeff Garland 79d6848e7d move formatters_limited to correct place
[SVN r22267]
2004-02-15 16:15:46 +00:00
Jeff Garland aba3f7ed05 changes to support wide strings
[SVN r22266]
2004-02-15 16:10:01 +00:00
Jeff Garland 2b6d32acca change to support wide string output
[SVN r22265]
2004-02-15 16:06:46 +00:00
Jeff Garland 2287dda4ea base changes to support wide string output
[SVN r22263]
2004-02-15 15:49:52 +00:00
Jeff Garland 68aa043dfd fix include guard bug, copyright info
[SVN r22262]
2004-02-15 15:37:06 +00:00
Jeff Garland aa7a964a1d new macros for wide string output
[SVN r22261]
2004-02-15 15:31:30 +00:00
Jeff Garland 8096967c61 add files for wide string output for compilers that don't meet the standard
[SVN r22260]
2004-02-15 15:28:21 +00:00
Jeff Garland 36968c543f merge compiler status updates from RC_1_31_0 -- add comments about wide stream output problems
[SVN r22126]
2004-02-01 23:29:56 +00:00
Jeff Garland ee5cdf9d4b merge acknowledegements update from RC_1_31_0
[SVN r22124]
2004-02-01 22:43:38 +00:00
Jeff Garland 5a51cb75a8 fix docs for std::out_of_range
[SVN r22122]
2004-02-01 22:24:06 +00:00
Jeff Garland 5b77dc8fc2 merge changes for licensing link
[SVN r22117]
2004-02-01 19:11:33 +00:00
Jeff Garland e142167816 minor documentation update
[SVN r22115]
2004-02-01 18:50:40 +00:00
Jeff Garland 72d0e65a9b update for wide stream output change
[SVN r22114]
2004-02-01 18:28:51 +00:00
Jeff Garland 7070a214ca update for wide stream output change
[SVN r22113]
2004-02-01 18:24:28 +00:00
Jeff Garland f2b5eff23d update version number
[SVN r22112]
2004-02-01 18:19:10 +00:00
Jeff Garland 004288d779 merge over minor doc fixes from RC_1_31_0
[SVN r22111]
2004-02-01 18:18:09 +00:00
Jeff Garland 21977374eb merge changes from RC1_31_0
[SVN r22110]
2004-02-01 18:12:10 +00:00
Jeff Garland b4cfc37ce7 tests for wide stream output
[SVN r21925]
2004-01-25 18:45:34 +00:00
Jeff Garland 8a97ff010e tests for widestream/string output
[SVN r21924]
2004-01-25 18:43:21 +00:00
Jeff Garland 2b38d8da8d updates to support wide stream output
[SVN r21923]
2004-01-25 18:42:25 +00:00
Jeff Garland 447569e1e0 changes to support wide char streams
[SVN r21921]
2004-01-25 18:26:57 +00:00
Jeff Garland 3671b2e023 merge various document updates from 1.31 release
[SVN r21835]
2004-01-20 05:01:34 +00:00
Jeff Garland 09e20fbf1a merge changes for bi-directional iterator
[SVN r21826]
2004-01-18 21:38:50 +00:00
Jeff Garland f32029704b fix for unused var compiler warning
[SVN r21618]
2004-01-12 04:12:02 +00:00
Jeff Garland cdf23a00d6 remove Wshadow warnings for gcc
[SVN r21602]
2004-01-11 17:41:21 +00:00
Jeff Garland acb4191993 fix gcc shadow warning
[SVN r21546]
2004-01-08 13:05:42 +00:00
John Maddock db5da36efe Modified dll build logic to conform to more/separate_compilation.html.
Added support for auto-linking.


[SVN r21544]
2004-01-08 12:45:46 +00:00
John Maddock b216663e3e Added tests to test dll builds of the library.
Added name mangling rule to lib and dll builds.


[SVN r21543]
2004-01-08 12:44:47 +00:00
Rene Rivera 88aa551f54 Fix tabs in file.
[SVN r21399]
2003-12-26 23:26:49 +00:00
Jeff Garland 32ee2bd343 fix exception info
[SVN r21394]
2003-12-25 01:46:53 +00:00
John Maddock 1873fbb643 Enabled dll builds for NT, restricted dll builds to <runtime-link>dynamic.
[SVN r21353]
2003-12-20 12:53:29 +00:00
Jeff Garland be2b60a3ee enable facet-based I/O for borland 554
[SVN r21340]
2003-12-19 14:20:30 +00:00
Jeff Garland 77823c63ee add test for subtraction of neg time duration
[SVN r21339]
2003-12-19 14:08:57 +00:00
Jeff Garland 3c4ce069c1 fix error with subtraction of neg duration
[SVN r21338]
2003-12-19 14:08:12 +00:00
Rene Rivera 8b69f3713a * Fix name of install library.
* Prevent building of DLL targets on Windows, as they don't export any symbols.


[SVN r21251]
2003-12-14 17:07:21 +00:00
Jeff Garland 42b4f1ac6e provide full include path for Metrowerks
[SVN r21250]
2003-12-14 13:59:58 +00:00
Beman Dawes 2a37f91d19 fix links broken by index.htm to index.html renaming
[SVN r21233]
2003-12-12 00:00:13 +00:00
Jeff Garland 5f5d424213 fix for metrowerks compilation issue
[SVN r21144]
2003-12-05 01:38:47 +00:00
Jeff Garland 66b5128a08 remove non-working metrowerks fix
[SVN r21109]
2003-12-03 03:36:14 +00:00
Jeff Garland af9a2aea07 extract fix that didn't fix metrowerks
[SVN r21108]
2003-12-03 03:30:48 +00:00
Jeff Garland 8f6259134c fix tabs / formatting in source
[SVN r21107]
2003-12-03 03:28:35 +00:00
Jeff Garland 8c4bdeee46 fix tabs / formatting in source
[SVN r21106]
2003-12-03 03:07:43 +00:00
Jeff Garland 249be91540 fix tabs / formatting in source
[SVN r21105]
2003-12-03 02:48:56 +00:00
Jeff Garland 4d93bc2a86 fix tabs / formatting in source
[SVN r21104]
2003-12-03 02:28:02 +00:00
Jeff Garland f96304dad4 fix tabs / formatting in source
[SVN r21103]
2003-12-03 02:22:16 +00:00
Jeff Garland d687da72a6 fix tabs / formatting in source
[SVN r21102]
2003-12-03 02:01:43 +00:00
Jeff Garland f73e7508bc fix tabs / formatting in source
[SVN r21101]
2003-12-03 01:56:13 +00:00
Jeff Garland 1ce4297c3a fix tabs in source
[SVN r21098]
2003-12-03 01:24:22 +00:00
Jeff Garland 7e47845ebb attempt to fix metrowerks issues
[SVN r21004]
2003-11-29 16:18:23 +00:00
Jeff Garland 5de8b60886 another attempt at fixing borland
[SVN r20968]
2003-11-27 02:25:13 +00:00
Jeff Garland 20fbc851e3 update for dll improvement
[SVN r20962]
2003-11-26 13:18:05 +00:00
Jeff Garland 364adc1165 fix up compile issues
[SVN r20960]
2003-11-26 13:08:52 +00:00
Jeff Garland dfb0230147 enhanced tests for date parsing
[SVN r20944]
2003-11-25 04:07:48 +00:00
Jeff Garland 28e89841c7 support for addtional date parsing formats - eg: Nov 10 2003
[SVN r20943]
2003-11-25 03:51:20 +00:00
Jeff Garland 2e04b5cd6d dll update for vc
[SVN r20923]
2003-11-23 16:13:28 +00:00
Jeff Garland ff4253a4da license update
[SVN r20922]
2003-11-23 16:12:01 +00:00
Jeff Garland c498ea51c2 make date constructor explicit
[SVN r20921]
2003-11-23 16:04:24 +00:00
Jeff Garland 047a1aa17d update for win32 dyanmic libraries
[SVN r20919]
2003-11-23 15:14:28 +00:00
Jeff Garland 1c8c15b707 fix include guard
[SVN r20915]
2003-11-23 03:42:01 +00:00
Jeff Garland c755b03260 license update
[SVN r20914]
2003-11-23 03:37:47 +00:00
Jeff Garland b8a42c49a6 license update
[SVN r20913]
2003-11-23 03:31:27 +00:00
Jeff Garland 3844415e7d license update
[SVN r20912]
2003-11-23 02:37:57 +00:00
Jeff Garland 4db575f16f license update
[SVN r20911]
2003-11-23 02:27:09 +00:00
Jeff Garland 2d9ac463ec modifications to support windows dlls
[SVN r20910]
2003-11-23 01:42:31 +00:00
Jeff Garland 105abd33fc fixes for borland regression errors
[SVN r20877]
2003-11-20 02:18:04 +00:00
Jeff Garland 71a8d6bf70 fixes for borland regression errors, start for windows dll correction
[SVN r20876]
2003-11-20 02:17:51 +00:00
Jeff Garland 6dfe20cd95 fix borland regression errors
[SVN r20849]
2003-11-19 00:46:52 +00:00
Jeff Garland 79bba50bb1 regression error fixes
[SVN r20848]
2003-11-18 23:27:38 +00:00
Jeff Garland a3ac6fd873 regression fixes
[SVN r20847]
2003-11-18 23:26:20 +00:00
Jeff Garland b44b6bc0c1 fix vc regression failures
[SVN r20817]
2003-11-15 18:01:45 +00:00
Jeff Garland 9fc167b721 fix regression failures 11-15-2003
[SVN r20816]
2003-11-15 17:35:51 +00:00
Jeff Garland 96a607e2d2 fixes for is_pos_inf
[SVN r20799]
2003-11-13 02:01:32 +00:00
Jeff Garland 7f3d05d39c vc level4 warning fixes
[SVN r20791]
2003-11-12 03:11:08 +00:00
Jeff Garland cabb996dc2 fix vc level 4 warnings
[SVN r20790]
2003-11-12 03:09:44 +00:00
Jeff Garland f19fe76dde fixes for tolower issues
[SVN r20789]
2003-11-12 02:58:06 +00:00
Jeff Garland aa4b705aa9 tolower fixes
[SVN r20788]
2003-11-12 02:57:22 +00:00
Jeff Garland 85d3d20014 fix issues with vc7 static method conflict
[SVN r20766]
2003-11-08 15:49:43 +00:00
Jeff Garland 1fe09852ca fix for failure of time_formatter regression test
[SVN r20677]
2003-11-05 02:38:37 +00:00
Jeff Garland ae58601e2b fixes for the INT64_C macro define problems
[SVN r20674]
2003-11-05 02:08:18 +00:00
Jeff Garland 7094455723 additional tests for time special values
[SVN r20649]
2003-11-04 13:59:42 +00:00
Jeff Garland 5089e18937 time special values update, plus some operator additions
[SVN r20648]
2003-11-04 13:58:36 +00:00
Jeff Garland 2654a5861d various test updates for special value support update
[SVN r20644]
2003-11-04 12:53:59 +00:00
Jeff Garland 3321b2df4a various updates for improved special value support
[SVN r20643]
2003-11-04 12:52:35 +00:00
Jeff Garland c91d1c8da8 various updates for improved special value support, additional operators such as += and -=
[SVN r20642]
2003-11-04 12:52:03 +00:00
Jeff Garland 8bbde67c3b update tests for infinity, nadt string changes
[SVN r20641]
2003-11-04 12:10:47 +00:00
Jeff Garland a35f4f2590 make infinity, nadt strings consistent
[SVN r20640]
2003-11-04 12:07:50 +00:00
Jeff Garland f27c407599 added is_pos is_neg_infinity methods for time sv changes
[SVN r20639]
2003-11-04 11:55:26 +00:00
Jeff Garland f74d481e92 various compilation macro cleanup
[SVN r20638]
2003-11-04 11:50:29 +00:00
Jeff Garland ebac5a5a8e various compiler warning fixes - msvc level 4
[SVN r20637]
2003-11-04 11:49:57 +00:00
Jeff Garland 8e3875a3ea additional change documentation 1.31 release
[SVN r20609]
2003-11-03 03:34:07 +00:00
Jeff Garland 0e853defeb fix issue with positive inf
[SVN r20475]
2003-10-24 13:02:55 +00:00
Jeff Garland 868fce50dc add tests for positive infin bug
[SVN r20474]
2003-10-24 13:02:13 +00:00
Jeff Garland 3b30273c21 change to fix Sun compiler
[SVN r20461]
2003-10-23 12:30:24 +00:00
Jeff Garland ca98cb0859 changes to allow parsing dates from strings with month names like: Feb, March, etc
[SVN r20412]
2003-10-19 19:57:14 +00:00
Jeff Garland a6fa4a8023 add month map functionality to provide for parsing of date strings with chars -- eg: Feb, March, april, etc
[SVN r20411]
2003-10-19 19:56:26 +00:00
Jeff Garland 0ae2743116 new tests for parsing month names with strings like: feb, mar, april, etc
[SVN r20410]
2003-10-19 19:53:59 +00:00
Rene Rivera e29baa357b Add install definitions for new common install configuration.
[SVN r20409]
2003-10-19 19:52:56 +00:00
Jeff Garland 92d95130d7 tests for % operator
[SVN r20406]
2003-10-19 16:41:57 +00:00
Jeff Garland 277cef10f8 add % operator to int_adaptor
[SVN r20405]
2003-10-19 16:41:15 +00:00
Jeff Garland 673abc18bb fixes for map/iterator based parsing of date string
[SVN r20404]
2003-10-19 16:40:49 +00:00
Jeff Garland 16669d60fa use new macros from compiler_config
[SVN r20403]
2003-10-19 16:39:25 +00:00
Jeff Garland 08d4d6a09b fixes for VC6 level4 compiler warnings
[SVN r20303]
2003-10-08 14:09:49 +00:00
Jeff Garland 2b1aa58bda fix como-win32 warning about extra semi-colon
[SVN r20302]
2003-10-08 14:03:52 +00:00
Jeff Garland 56fb6aa8e1 fix msvc compiler warnings
[SVN r20284]
2003-10-07 13:28:54 +00:00
Jeff Garland 8aea9fa6fa fixes for msvc warnings
[SVN r20283]
2003-10-07 13:26:15 +00:00
Jeff Garland 077ec3ef61 Changes to reduce MSVC warnings
[SVN r20281]
2003-10-07 13:21:42 +00:00
Vladimir Prus 85d87a220e Add V2 Jamfile
[SVN r20210]
2003-09-29 16:09:15 +00:00
Jeff Garland 8a4b1a6001 fixes for msvc level4 warnings
[SVN r20203]
2003-09-27 22:20:37 +00:00
Jeff Garland 44fb871dc5 fixes for msvc level4 warnings
[SVN r20202]
2003-09-27 21:58:16 +00:00
Jeff Garland f881a67b0e fix comment / include
[SVN r20201]
2003-09-27 21:57:43 +00:00
Jeff Garland d503bb0496 fixes for msvc level4 warnings
[SVN r20200]
2003-09-27 21:48:14 +00:00
Jeff Garland c46cecccd4 fixes for msvc level4 warnings
[SVN r20199]
2003-09-27 21:42:58 +00:00
Jeff Garland 9241531a49 fixes for msvc level4 warnings
[SVN r20198]
2003-09-27 21:26:29 +00:00
Jeff Garland 2523a7fc61 add test, updates based on comments from C. tondering
[SVN r20181]
2003-09-25 11:13:33 +00:00
Jeff Garland 1a8a857f22 fix algorithm for week no based on comment from C. Tondering
[SVN r20180]
2003-09-25 11:12:27 +00:00
Jeff Garland 690486c4b2 update calendar faq reference
[SVN r20179]
2003-09-25 11:11:24 +00:00
Jeff Garland 0f9f372295 fix Wshadow warning from gcc
[SVN r20141]
2003-09-22 01:38:57 +00:00
Jeff Garland b9fe05875a fix Wshadow warning from gcc
[SVN r20139]
2003-09-22 00:14:58 +00:00
Jeff Garland 5c5f8bd576 additional tests for negative durations
[SVN r20052]
2003-09-14 15:14:54 +00:00
Dave Abrahams 8ec542234c Use the import rule
[SVN r19968]
2003-09-08 17:38:49 +00:00
Jeff Garland 901244927d various fixes for negative durations, add tests for total_milliseconds, total_nanoseconds, total_microseconds
[SVN r19959]
2003-09-08 05:40:17 +00:00
Jeff Garland e29d9fcbe9 prepare for removal of this file
[SVN r19958]
2003-09-08 05:38:53 +00:00
Jeff Garland 8572fff355 move tests to testtime_formatters.cpp
[SVN r19957]
2003-09-08 05:37:20 +00:00
Jeff Garland c39bb1ed6f changes to fix negative time durations
[SVN r19956]
2003-09-08 05:34:40 +00:00
Jeff Garland ac5f0a0dd5 various fixes for time_duration negative handling, add total_milliseconds etc methods
[SVN r19955]
2003-09-08 05:32:55 +00:00
Jeff Garland fe9be81269 various fixes for time_duration negative handling
[SVN r19954]
2003-09-08 05:32:30 +00:00
Jeff Garland 6893422d7e fix return value so errors are reported
[SVN r19952]
2003-09-08 02:49:33 +00:00
Jeff Garland 137b13e5ac additional tests for negative durations
[SVN r19951]
2003-09-08 02:32:41 +00:00
Jeff Garland b69a2fd11a upgrade comment
[SVN r19950]
2003-09-07 23:53:32 +00:00
Jeff Garland e7b821d39a add tests for bi-directional time_itr
[SVN r19943]
2003-09-07 12:57:00 +00:00
Jeff Garland c5806120ad add bi-directional iteration to time_itr
[SVN r19942]
2003-09-07 12:56:23 +00:00
Jeff Garland 6230c495fd add streaming, fifth kday of month tests
[SVN r19935]
2003-09-06 14:04:15 +00:00
Jeff Garland c8c4897df2 change nth_kday_of_month to return last kday if fifth kday of month is selected and it doesn't exist
[SVN r19934]
2003-09-06 14:03:39 +00:00
Jeff Garland 22ed668f9b fix return value
[SVN r19933]
2003-09-06 13:43:11 +00:00
Jeff Garland f5f0fb52a9 add streams test, rename time formatters, add greg_year test
[SVN r19932]
2003-09-06 13:09:33 +00:00
Jeff Garland 68c42ff3bd change name of testtime formatters so jam will run it
[SVN r19931]
2003-09-06 12:50:02 +00:00
Jeff Garland d3716e2513 add better names for algorithms
[SVN r19918]
2003-09-04 13:41:32 +00:00
Jeff Garland 9f34050074 add full length names
[SVN r19917]
2003-09-04 12:12:15 +00:00
Jeff Garland 605d381c3c add a testcase that lacks a full time string
[SVN r19882]
2003-08-30 14:00:19 +00:00
Jeff Garland ff796a6c08 fix uninitialized vars in parse undelimeted
[SVN r19881]
2003-08-30 13:40:33 +00:00
Jeff Garland d4a4db1138 negative offset feature
[SVN r19877]
2003-08-30 03:42:26 +00:00
Jeff Garland 82f49159e0 test for parsing negative time durations
[SVN r19835]
2003-08-28 13:46:12 +00:00
Jeff Garland 10f1a829be fixes for parsing negative time durations
[SVN r19834]
2003-08-28 13:45:45 +00:00
Jeff Garland 4fe9b0dcc6 fixes for adding backward iteration
[SVN r19833]
2003-08-28 13:27:48 +00:00
Jeff Garland 579777976e add backward iteration capabilities
[SVN r19832]
2003-08-28 13:26:24 +00:00
Jeff Garland 055def3eb4 add subtract functions to wrapping int
[SVN r19831]
2003-08-28 13:22:27 +00:00
Jeff Garland 9824f14ab0 updates to operator<< to fix compile errors on 2.95.3 stlport and vc7
[SVN r19786]
2003-08-26 13:27:01 +00:00
Jeff Garland c99ca996b9 fix Borland compiler warning
[SVN r19769]
2003-08-25 12:08:36 +00:00
Jeff Garland a3121f37e9 fix compilation issues borland, msvc
[SVN r19763]
2003-08-24 16:15:09 +00:00
Jeff Garland adad180a08 fix compile errors for borland, gcc 295
[SVN r19739]
2003-08-23 04:15:22 +00:00
Jeff Garland 14471d7045 updates for borland msvc
[SVN r19738]
2003-08-23 04:14:34 +00:00
Jeff Garland d74439f1e3 attempt to fix some compiler errors
[SVN r19733]
2003-08-22 13:28:26 +00:00
Jeff Garland 1616a54f19 test infinite duration streaming
[SVN r19712]
2003-08-20 04:24:22 +00:00
Jeff Garland c47fbcd90c add tests for infinite date duration support
[SVN r19711]
2003-08-20 04:23:12 +00:00
Jeff Garland e091d8ec66 rename hull to span
[SVN r19710]
2003-08-20 04:21:54 +00:00
Jeff Garland 315965c292 fix up comments, support for infinate date_duration
[SVN r19709]
2003-08-20 04:20:44 +00:00
Jeff Garland cbd8d650e5 Changes to provide special value support for date_duration
[SVN r19708]
2003-08-20 04:19:27 +00:00
Jeff Garland 87821ff9c6 serious beef up of int_adpater tests
[SVN r19707]
2003-08-20 03:32:01 +00:00
Jeff Garland 15abcff1b9 updates to int_adapter to provide support for infinate durations
[SVN r19706]
2003-08-20 03:31:16 +00:00
Jeff Garland 38f8a0b6ae add unary- tests
[SVN r19705]
2003-08-20 03:17:07 +00:00
Jeff Garland d117ba3069 add unary operator- to time_duration
[SVN r19704]
2003-08-20 03:16:09 +00:00
Jeff Garland 03e130cb18 fix name of last parameter, fix operator<, rename hull to span
[SVN r19703]
2003-08-20 03:15:13 +00:00
Jeff Garland b24305e0c2 move posix_time/period.cpp to posix_time/testtime_period.cpp so these tests get run in the regression
[SVN r19702]
2003-08-20 02:41:33 +00:00
Jeff Garland 18c9082f51 change name of test period to testtime_period
[SVN r19701]
2003-08-20 02:31:59 +00:00
Jeff Garland c4e2043622 update hull to span, fix problem with constructor last versus end
[SVN r19693]
2003-08-19 13:42:51 +00:00
Jeff Garland 43cfb9fa51 change merge_inclusive to hull
[SVN r19663]
2003-08-17 16:14:01 +00:00
Jeff Garland f57e968395 change merge_inclusive to hull
[SVN r19662]
2003-08-17 16:08:37 +00:00
Jeff Garland f9e4b0b66d updates to changes since last release
[SVN r19641]
2003-08-16 14:28:42 +00:00
Jeff Garland b6d1462174 add merge_inclusive feature
[SVN r19640]
2003-08-16 14:23:41 +00:00
Jeff Garland bfd330c431 add merge_inclusive tests
[SVN r19639]
2003-08-16 14:22:35 +00:00
Jeff Garland fab8c1a12f add merge_inclusive feature to periods
[SVN r19638]
2003-08-16 14:20:07 +00:00
Jeff Garland 7a7ba29d66 fix como warning about unused vars
[SVN r19593]
2003-08-14 13:11:26 +00:00
Jeff Garland b761ce6c1b fix scoping of time_t - compile error on borland
[SVN r19592]
2003-08-14 13:08:45 +00:00
Jeff Garland 752991b1af fix error on gcc 2.95 by removing test, move tests from testformmatter to testfact
[SVN r19590]
2003-08-14 13:04:48 +00:00
Jeff Garland 3c8a40a335 fixes overflow error for several compilers
[SVN r19589]
2003-08-14 13:01:19 +00:00
Jeff Garland 2b24317b12 fix shadow warning in gcc
[SVN r19570]
2003-08-13 11:33:52 +00:00
Jeff Garland 8dfed5b6dc add methods for date generator streaming
[SVN r19555]
2003-08-12 14:43:07 +00:00
Jeff Garland 6b600e6309 add methods for streaming of generators
[SVN r19554]
2003-08-12 14:41:27 +00:00
Jeff Garland 560b37e503 cleanup tests execution for compilers that lack facet support
[SVN r19550]
2003-08-12 12:41:39 +00:00
Jeff Garland ed36eb7322 fixes for borland compiler
[SVN r19549]
2003-08-12 12:41:08 +00:00
Jeff Garland 1f8f0c5026 use std::time_t
[SVN r19531]
2003-08-11 13:21:20 +00:00
Jeff Garland 6112bc2ded expand explanation of fractional seconds, add docs for total_seconds, multiply, divide operator
[SVN r19524]
2003-08-10 23:21:17 +00:00
Jeff Garland ca7d503b1a add more tests of multiply, divide
[SVN r19523]
2003-08-10 23:20:15 +00:00
Jeff Garland f25e5ef65f add multiplication operator
[SVN r19522]
2003-08-10 23:19:16 +00:00
Jeff Garland 6f73ec235e fix types to resolve borland compiler warnings
[SVN r19513]
2003-08-10 19:21:35 +00:00
Jeff Garland c1dc1fefd7 updates to test total_seconds method
[SVN r19511]
2003-08-10 18:16:04 +00:00
Jeff Garland fcadebac35 switch over to subsecond_duration template for defining derived duration types
[SVN r19510]
2003-08-10 18:07:04 +00:00
Jeff Garland 30f3921399 add total_seconds method, cleanup some formatting, remove redundant subsecond resolution templates
[SVN r19509]
2003-08-10 18:06:05 +00:00
Jeff Garland 54b85d14ed additions for time_t conversion function
[SVN r19506]
2003-08-10 14:16:27 +00:00
Jeff Garland 60cc78225f add tests for time_t conversion function
[SVN r19505]
2003-08-10 14:14:39 +00:00
Jeff Garland f3ee29612d add time_t conversion function
[SVN r19504]
2003-08-10 14:12:58 +00:00
Jeff Garland aa2876adf4 update version/change info
[SVN r19497]
2003-08-09 19:48:59 +00:00
Jeff Garland 9d6fedb8e5 fix spelling
[SVN r19496]
2003-08-09 18:22:31 +00:00
Jeff Garland 6f4de9431a update documentation of calculations, especially special value handling
[SVN r19493]
2003-08-09 16:38:21 +00:00
Jeff Garland 3c82684e3e fixes for borland
[SVN r19343]
2003-07-29 14:08:31 +00:00
Jeff Garland 0a86d8e186 additional tests
[SVN r19285]
2003-07-23 16:02:18 +00:00
Jeff Garland eb04a5c5ae fix MS compiler problems with operators
[SVN r19284]
2003-07-23 15:56:08 +00:00
Jeff Garland 2020482302 remove dividable to fix MS compilers
[SVN r19283]
2003-07-23 15:48:31 +00:00
Jeff Garland 3b778e1a45 add static cast to quiet Borland compiler warning
[SVN r19224]
2003-07-19 21:34:06 +00:00
Jeff Garland a520d6aedd make sure of integer conversion in when no facet
[SVN r19222]
2003-07-19 21:21:11 +00:00
Jeff Garland 2d0572c6db arithmetic operations updates
[SVN r19218]
2003-07-19 20:39:42 +00:00
Jeff Garland 9cd2a4b039 add dividable and other arithmetic operations fixes
[SVN r19217]
2003-07-19 20:38:15 +00:00
Jeff Garland 43e5728bab add additional arithmetic operator tests
[SVN r19216]
2003-07-19 20:09:31 +00:00
Jeff Garland 09b5b2c11e add more arithmetic operators
[SVN r19215]
2003-07-19 20:08:53 +00:00
Jeff Garland 091a30280f Made exception for day of month out of range clearer
[SVN r18877]
2003-06-27 14:20:52 +00:00
Jeff Garland 7deb6833a7 add additional generator types to gregorian namespace
[SVN r18876]
2003-06-27 14:09:48 +00:00
Jeff Garland 824646c38c add copyright
[SVN r18794]
2003-06-15 14:37:58 +00:00
Jeff Garland 6f4487efdb Apply patch from Synge Todo to support sgi
[SVN r18708]
2003-06-08 20:43:45 +00:00
Beman Dawes 3e78819c59 fix two-phase name lookup problems
[SVN r18567]
2003-05-27 17:50:44 +00:00
Beman Dawes efe82193b6 fix two-phase name lookup problems
[SVN r18566]
2003-05-27 17:35:33 +00:00
Beman Dawes c4a58941b2 remove spurious semcolons
[SVN r18565]
2003-05-27 17:22:42 +00:00
Beman Dawes 1eb07c09de remove spurious semcolons
[SVN r18564]
2003-05-27 17:13:20 +00:00
Beman Dawes fb726c9d59 remove extra semcolons to silence Comeau warnings
[SVN r18563]
2003-05-27 15:17:32 +00:00
Beman Dawes 757f9f3aa7 remove extra semcolons to silence Comeau warnings
[SVN r18562]
2003-05-27 14:57:22 +00:00
Jeff Garland b3d100de3c updates for is_after, is_before, etc
[SVN r18561]
2003-05-27 14:55:40 +00:00
Guillaume Melquiond 79625f8b11 Remove a 64-bit integer constant and replace it by runtime computations as it is already done in other places of the code
[SVN r18446]
2003-05-19 12:21:46 +00:00
Jeff Garland d81b8ee85a make integer constructors explicit
[SVN r18329]
2003-04-28 14:30:49 +00:00
Jeff Garland 3703aad2f8 fixes for time duration overflow bug
[SVN r18282]
2003-04-20 17:51:50 +00:00
Jeff Garland 019634b25b added test for long time durations
[SVN r18281]
2003-04-20 17:45:30 +00:00
Jeff Garland 03acae34f9 updates to fix time duration overflow problem
[SVN r18280]
2003-04-20 17:44:02 +00:00
Jeff Garland c895a85254 add changes file
[SVN r18040]
2003-03-21 12:45:42 +00:00
336 changed files with 39229 additions and 7797 deletions
+116
View File
@@ -0,0 +1,116 @@
# Copyright 2016, 2017 Peter Dimov
# Copyright 2017 - 2019 James E. King III
# Copyright 2019 - 2021 Alexander Grund
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
#
# Generic Appveyor build script for boostorg repositories
# See: https://github.com/boostorg/boost-ci/
#
# Instructions for customizing this script for your library:
#
# 1. Customize the compilers and language levels you want.
# 2. If you have more than include/, src/, test/, example/, examples/,
# benchmark/ or tools/ directories, set the environment variable DEPINST.
# For example if your build uses code in "bench/" and "fog/" directories:
# - DEPINST: --include bench --include fog
# 3. Enable pull request builds in your boostorg/<library> account.
#
# That's it - the script will do everything else for you.
#
version: 1.0.{build}-{branch}
shallow_clone: true
branches:
only:
- master
- develop
- /bugfix\/.*/
- /feature\/.*/
- /fix\/.*/
- /pr\/.*/
matrix:
fast_finish: false
# Adding MAYFAIL to any matrix job allows it to fail but the build stays green:
allow_failures:
- MAYFAIL: true
environment:
global:
B2_CI_VERSION: 1
GIT_FETCH_JOBS: 4
# see: http://www.boost.org/build/doc/html/bbv2/overview/invocation.html#bbv2.overview.invocation.properties
# to use the default for a given environment, comment it out; recommend you build debug and release however:
# on Windows it is important to exercise all the possibilities, especially shared vs static, however most
# libraries that care about this exercise it in their Jamfiles...
B2_ADDRESS_MODEL: 32,64
B2_LINK: shared,static
# B2_THREADING: threading=multi,single
B2_VARIANT: release
BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: 1
matrix:
- FLAVOR: Visual Studio 2017 C++2a Strict
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
B2_CXXFLAGS: -permissive-
B2_CXXSTD: 2a
B2_TOOLSET: msvc-14.1
- FLAVOR: Visual Studio 2017 C++14/17
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
B2_CXXSTD: 14,17
B2_TOOLSET: msvc-14.1
- FLAVOR: clang-cl
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
B2_ADDRESS_MODEL: 64
B2_CXXSTD: 11,14,17
B2_TOOLSET: clang-win
- FLAVOR: Visual Studio 2015, 2013
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
B2_TOOLSET: msvc-12.0,msvc-14.0
- FLAVOR: Visual Studio 2008, 2010, 2012
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
B2_TOOLSET: msvc-9.0,msvc-10.0,msvc-11.0
B2_ADDRESS_MODEL: 32 # No 64bit support
- FLAVOR: cygwin (32-bit)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
ADDPATH: C:\cygwin\bin;
B2_ADDRESS_MODEL: 32
B2_CXXSTD: 03,11,14,1z
B2_THREADING: threadapi=pthread
B2_TOOLSET: gcc
- FLAVOR: cygwin (64-bit)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
ADDPATH: C:\cygwin64\bin;
B2_ADDRESS_MODEL: 64
B2_CXXSTD: 03,11,14,1z
B2_THREADING: threadapi=pthread
B2_TOOLSET: gcc
- FLAVOR: mingw64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin;
B2_ADDRESS_MODEL: 64
B2_CXXSTD: 03,11,14,17,2a
B2_TOOLSET: gcc
install:
- git clone --depth 1 https://github.com/boostorg/boost-ci.git C:\boost-ci-cloned
# Copy ci folder if not testing Boost.CI
- if NOT "%APPVEYOR_PROJECT_NAME%" == "boost-ci" xcopy /s /e /q /i /y C:\boost-ci-cloned\ci .\ci
- rmdir /s /q C:\boost-ci-cloned
- ci\appveyor\install.bat
build: off
test_script: ci\build.bat
+23
View File
@@ -0,0 +1,23 @@
# Copyright 2019 - 2021 Alexander Grund
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
#
# Sample codecov configuration file. Edit as required
codecov:
max_report_age: off
require_ci_to_pass: yes
notify:
# Increase this if you have multiple coverage collection jobs
after_n_builds: 2
wait_for_ci: yes
# Change how pull request comments look
comment:
layout: "reach,diff,flags,files,footer"
# Ignore specific files or folders. Glob patterns are supported.
# See https://docs.codecov.com/docs/ignoring-paths
ignore:
- libs/date_time/test/
- test
+50
View File
@@ -0,0 +1,50 @@
#
# Copyright 2020-2021 Peter Dimov
# Copyright 2021 Andrey Semashev
# Copyright 2021-2024 Alexander Grund
# Copyright 2022-2025 James E. King III
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
#
# This workflow uses the Boost.CI reusable workflow which builds a variety of
# configurations of your project, runs tests, and generates code coverage reports.
#
# To use it, copy this file into your repository as `.github/workflows/ci.yml` and
# customize it appropriately.
#
---
name: Boost.CI
on:
pull_request:
push:
branches:
- master
- develop
- bugfix/**
- feature/**
- fix/**
- pr/**
paths-ignore:
- LICENSE
- meta/**
- README.md
jobs:
call-boost-ci:
name: Run Boost.CI
uses: boostorg/boost-ci/.github/workflows/reusable.yml@master
with:
# no endian branches
enable_multiarch: false
# serialization has issues, not enough time to add suppressions
enable_sanitizers: false
# these compilers fail
exclude_compiler: 'gcc-4.7,gcc-4.8,gcc-4.9,gcc-5,clang-3.5,clang-3.6,clang-3.7,clang-3.8'
# the tests take a while; this reduces the load a bit and there isn't any C++20 specific code
exclude_cxxstd: '98,03,0x,2a,20'
secrets:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
COVERITY_SCAN_NOTIFICATION_EMAIL: ${{ secrets.COVERITY_SCAN_NOTIFICATION_EMAIL }}
COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
+2
View File
@@ -0,0 +1,2 @@
**/test_facet_file.out
**/time_duration_serialization.*
+4
View File
@@ -0,0 +1,4 @@
# https://github.com/boostorg/serialization/issues/122
vptr:/usr/include/c++/*/bits/ios_base.h
# https://github.com/boostorg/serialization/issues/193
# could not figure out how to suppress it
+52
View File
@@ -0,0 +1,52 @@
# Generated by `boostdep --cmake date_time`
# Copyright 2020 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# https://www.boost.org/LICENSE_1_0.txt
cmake_minimum_required(VERSION 3.5...3.16)
project(boost_date_time VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
add_library(boost_date_time
src/gregorian/greg_month.cpp
)
add_library(Boost::date_time ALIAS boost_date_time)
target_include_directories(boost_date_time PUBLIC include)
target_link_libraries(boost_date_time
PUBLIC
Boost::algorithm
Boost::assert
Boost::config
Boost::core
Boost::io
Boost::lexical_cast
Boost::numeric_conversion
Boost::range
Boost::smart_ptr
Boost::throw_exception
Boost::tokenizer
Boost::type_traits
Boost::utility
Boost::winapi
)
target_compile_definitions(boost_date_time
PUBLIC BOOST_DATE_TIME_NO_LIB
PRIVATE BOOST_DATE_TIME_SOURCE
)
if(BUILD_SHARED_LIBS)
target_compile_definitions(boost_date_time PUBLIC BOOST_DATE_TIME_DYN_LINK)
else()
target_compile_definitions(boost_date_time PUBLIC BOOST_DATE_TIME_STATIC_LINK)
endif()
if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
add_subdirectory(test)
endif()
+23
View File
@@ -0,0 +1,23 @@
Boost Software License - Version 1.0 - August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:
The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
+40
View File
@@ -0,0 +1,40 @@
DateTime, part of the collection of [Boost C++ Libraries](http://github.com/boostorg), makes programming with dates and times as simple and natural as programming with strings and integers.
### License
Distributed under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
### Properties
* C++11
* Header only
### Build Status
<!-- boost-ci/tools/makebadges.sh --repo date_time --appveyorbadge upf5c528fy09fudk --codecovbadge nDoh7t8f6g --coverity 14908 -->
| Branch | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps | Docs | Tests |
| :-------------: | ------ | -------- | ------------- | ---------- | ---- | ---- | ----- |
| [`master`](https://github.com/boostorg/date_time/tree/master) | [![Build Status](https://github.com/boostorg/date_time/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/date_time/actions?query=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/upf5c528fy09fudk/branch/master?svg=true)](https://ci.appveyor.com/project/cppalliance/date-time/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/14908/badge.svg)](https://scan.coverity.com/projects/boostorg-date_time) | [![codecov](https://codecov.io/gh/boostorg/date_time/branch/master/graph/badge.svg?token=nDoh7t8f6g)](https://codecov.io/gh/boostorg/date_time/tree/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/date_time.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/date_time) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](https://www.boost.org/development/tests/master/developer/date_time.html) |
| [`develop`](https://github.com/boostorg/date_time/tree/develop) | [![Build Status](https://github.com/boostorg/date_time/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/date_time/actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/upf5c528fy09fudk/branch/develop?svg=true)](https://ci.appveyor.com/project/cppalliance/date-time/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/14908/badge.svg)](https://scan.coverity.com/projects/boostorg-date_time) | [![codecov](https://codecov.io/gh/boostorg/date_time/branch/develop/graph/badge.svg?token=nDoh7t8f6g)](https://codecov.io/gh/boostorg/date_time/tree/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/date_time.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/date_time) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](https://www.boost.org/development/tests/develop/developer/date_time.html) |
### Directories
Note that the built library is only for build backward compatibility and contains no symbols. date_time is now header only.
| Name | Purpose |
| --------- | --------------------------------------- |
| `build` | build script for optional lib build |
| `data` | timezone database |
| `doc` | documentation |
| `example` | use case examples |
| `include` | headers |
| `src` | source code for optional link library |
| `test` | unit tests |
| `xmldoc` | documentation source |
### More information
* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,boost-date_time): Be sure to read the documentation first to see if it answers your question.
* [Report bugs](https://github.com/boostorg/date_time/issues): Be sure to mention Boost version, platform and compiler you're using. A small compilable code sample to reproduce the problem is always good as well.
* [Submit Pull Requests](https://github.com/boostorg/date_time/pulls) against the **develop** branch. Note that by submitting patches you agree to license your modifications under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt). Be sure to include tests proving your changes work properly.
* Discussions about the library are held on the [Boost developers mailing list](http://www.boost.org/community/groups.html#main). Be sure to read the [discussion policy](http://www.boost.org/community/policy.html) before posting and add the `[date_time]` tag at the beginning of the subject line.
+37
View File
@@ -0,0 +1,37 @@
# Copyright René Ferdinand Rivera Morell 2023-2024
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
require-b2 5.2 ;
constant boost_dependencies :
/boost/algorithm//boost_algorithm
/boost/assert//boost_assert
/boost/config//boost_config
/boost/core//boost_core
/boost/io//boost_io
/boost/lexical_cast//boost_lexical_cast
/boost/numeric_conversion//boost_numeric_conversion
/boost/range//boost_range
/boost/smart_ptr//boost_smart_ptr
/boost/throw_exception//boost_throw_exception
/boost/tokenizer//boost_tokenizer
/boost/type_traits//boost_type_traits
/boost/utility//boost_utility
/boost/winapi//boost_winapi ;
project /boost/date_time
: common-requirements
<include>include
;
explicit
[ alias boost_date_time : build//boost_date_time ]
[ alias all : boost_date_time example test ]
;
call-if : boost-library date_time
: install boost_date_time
;
-38
View File
@@ -1,38 +0,0 @@
# (C) Copyright 2002. Permission to copy, use, modify, sell and
# distribute this software is granted provided this copyright notice appears
# in all copies. This software is provided "as is" without express or implied
# warranty, and with no claim as to its suitability for any purpose.
#
#
# Boost.date_time build
#
# To run all tests quietly: jam test
#
# Declares the following targets:
# 1. libboost_date_time, a library to be linked with all
# Boost.date_time modules
#
# declare the location of this subproject relative to the root
subproject libs/date_time/build ;
# comment the line below and comment out the line above to change to
# 64 bit counted time implementation
local DATE_TIME_PROPERTIES = <define>BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG ;
# Base names of the source files for libboost_date_time
CPP_SOURCES =
greg_month greg_weekday ;
dll boost_date_time : ../src/gregorian/$(CPP_SOURCES).cpp
: <sysinclude>$(BOOST_ROOT) $(DATE_TIME_PROPERTIES)
: debug release
;
lib boost_date_time : ../src/gregorian/$(CPP_SOURCES).cpp
: <sysinclude>$(BOOST_ROOT) $(DATE_TIME_PROPERTIES)
: debug release
;
+18 -30
View File
@@ -1,36 +1,24 @@
# (C) Copyright 2002. Permission to copy, use, modify, sell and
# distribute this software is granted provided this copyright notice appears
# in all copies. This software is provided "as is" without express or implied
# warranty, and with no claim as to its suitability for any purpose.
# Copyright (c) 2002-2005 CrystalClear Software, Inc.
# Use, modification and distribution is subject to the
# Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
#
#
# Boost.date_time build and test Jamfile
#
# Based on boost.python Jamfile
#
# To run all tests quietly: jam test
#
# Declares the following targets:
# 1. libboost_date_time, a static link library to be linked with all
# Boost.date_time modules
# date_time is now header only -- this file provides a stub for backward compatibility
#
project boost/date_time
project
: common-requirements <library>$(boost_dependencies)
: requirements
<define>DATE_TIME_INLINE <define>BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
: usage-requirements
<define>DATE_TIME_INLINE <define>BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
<define>DATE_TIME_INLINE
<link>shared:<define>BOOST_ALL_DYN_LINK=1
: usage-requirements
<define>DATE_TIME_INLINE
<link>shared:<define>BOOST_DATE_TIME_DYN_LINK=1
<define>BOOST_DATE_TIME_NO_LINK=1
: source-location ../src
;
#######################
#
# Declare the boost date_time static link library
#
# Base names of the source files for libboost_date_time
local GREGORIAN_CPP_SOURCES = gregorian_types greg_month greg_weekday ;
lib boost_date_time : ../src/gregorian/$(GREGORIAN_CPP_SOURCES).cpp ;
#time examples
# greg_month.cpp is now just a stub so that there is
# still a boost_date_time library to link for backward compatibility
lib boost_date_time : gregorian/greg_month.cpp ;
+92
View File
@@ -0,0 +1,92 @@
The csv file containing the zone_specs used by the
boost::local_time::tz_database is intended to be customized by the
library user. When customizing this file (or creating your own) the
file must follow a specific format.
This first line is expected to contain column headings and is therefore
not processed by the tz_database.
Each record (line) must have eleven fields. Some of those fields can
be empty. Every field (even empty ones) must be enclosed in double-quotes.
Ex:
"America/Phoenix" <- string enclosed in quotes
"" <- empty field
Some fields represent a length of time. The format of these fields must be:
"{+|-}hh:mm[:ss]" <- length-of-time format
Where the plus or minus is mandatory and the seconds are optional.
Since some time zones do not use daylight savings it is not always necessary
for every field in a zone_spec to contain a value. All zone_specs must have
at least ID and GMT offset. Zones that use daylight savings must have all
fields filled except: STD ABBR, STD NAME, DST NAME. You should take note
that DST ABBR is mandatory for zones that use daylight savings (see field
descriptions for further details).
********* Fields and their description/details *********
* ID
Contains the identifying string for the zone_spec. Any string will
do as long as it's unique. No two ID's can be the same.
* STD ABBR
* STD NAME
* DST ABBR
* DST NAME
These four are all the names and abbreviations used by the time
zone being described. While any string will do in these fields,
care should be taken. These fields hold the strings that will be
used in the output of many of the local_time classes.
Ex:
time_zone nyc = tz_db.time_zone_from_region("America/New_York");
local_time ny_time(date(2004, Aug, 30), IS_DST, nyc);
cout << ny_time.to_long_string() << endl;
// 2004-Aug-30 00:00:00 Eastern Daylight Time
cout << ny_time.to_short_string() << endl;
// 2004-Aug-30 00:00:00 EDT
NOTE: The exact format/function names may vary - see local_time
documentation for further details.
* GMT offset
This is the number of hours added to utc to get the local time
before any daylight savings adjustments are made. Some examples
are: America/New_York offset -5 hours, & Africa/Cairo offset +2 hours.
The format must follow the length-of-time format described above.
* DST adjustment
The amount of time added to gmt_offset when daylight savings is in
effect. The format must follow the length-of-time format described
above.
#####################################################################
##### TODO: more rule capabilities are needed - this portion of #####
##### the tz_database is incomplete #####
#####################################################################
* DST Start Date rule
This is a specially formatted string that describes the day of year
in which the transition take place. It holds three fields of it's own,
separated by semicolons.
* The first field indicates the "nth" weekday of the month. The
possible values are: 1 (first), 2 (second), 3 (third),
4 (fourth), 5 (fifth), and -1 (last).
* The second field indicates the day-of-week from 0-6 (Sun=0).
* The third field indicates the month from 1-12 (Jan=1).
Examples are: "-1;5;9"="Last Friday of September",
"2;1;3"="Second Monday of March"
* Start time
Start time is the number of hours past midnight, on the day of the
start transition, the transition takes place. More simply put, the
time of day the transition is made (in 24 hours format). The format
must follow the length-of-time format described above with the
exception that it must always be positive.
* DST End date rule
See DST Start date rule. The difference here is this is the day
daylight savings ends (transition to STD).
* End time
Same as Start time.
+520
View File
@@ -0,0 +1,520 @@
"ID","STD ABBR","STD NAME","DST ABBR","DST NAME","GMT offset","DST adjustment","DST Start Date rule","Start time","DST End date rule","End time"
"Africa/Abidjan","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Accra","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Addis_Ababa","EAT","EAT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Africa/Algiers","CET","CET","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/Asmara","EAT","EAT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Africa/Asmera","EAT","EAT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Africa/Bamako","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Bangui","WAT","WAT","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/Banjul","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Bissau","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Blantyre","CAT","CAT","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Africa/Brazzaville","WAT","WAT","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/Bujumbura","CAT","CAT","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Africa/Cairo","EET","EET","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Africa/Casablanca","WET","WET","WEST","WEST","+00:00:00","+01:00:00","2;0;7","+02:00:00","-1;0;10","+03:00:00"
"Africa/Ceuta","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Africa/Conakry","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Dakar","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Dar_es_Salaam","EAT","EAT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Africa/Djibouti","EAT","EAT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Africa/Douala","WAT","WAT","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/El_Aaiun","WET","WET","WEST","WEST","+00:00:00","+01:00:00","2;0;7","+02:00:00","-1;0;10","+03:00:00"
"Africa/Freetown","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Gaborone","CAT","CAT","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Africa/Harare","CAT","CAT","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Africa/Johannesburg","SAST","SAST","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Africa/Juba","EAT","EAT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Africa/Kampala","EAT","EAT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Africa/Khartoum","EAT","EAT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Africa/Kigali","CAT","CAT","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Africa/Kinshasa","WAT","WAT","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/Lagos","WAT","WAT","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/Libreville","WAT","WAT","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/Lome","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Luanda","WAT","WAT","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/Lubumbashi","CAT","CAT","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Africa/Lusaka","CAT","CAT","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Africa/Malabo","WAT","WAT","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/Maputo","CAT","CAT","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Africa/Maseru","SAST","SAST","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Africa/Mbabane","SAST","SAST","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Africa/Mogadishu","EAT","EAT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Africa/Monrovia","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Nairobi","EAT","EAT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Africa/Ndjamena","WAT","WAT","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/Niamey","WAT","WAT","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/Nouakchott","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Ouagadougou","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Porto-Novo","WAT","WAT","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/Porto_Novo","WAT","WAT","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/Sao_Tome","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Timbuktu","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Africa/Tripoli","EET","EET","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Africa/Tunis","CET","CET","","","+01:00:00","+00:00:00","","","","+00:00:00"
"Africa/Windhoek","WAT","WAT","WAST","WAST","+01:00:00","+01:00:00","1;0;9","+02:00:00","1;0;4","+02:00:00"
"America/Adak","HST","HST","HDT","HDT","-10:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Anchorage","AKST","AKST","AKDT","AKDT","-09:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Anguilla","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Antigua","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Araguaina","BRT","BRT","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Argentina/Buenos_Aires","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Argentina/Catamarca","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Argentina/ComodRivadavia","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Argentina/Cordoba","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Argentina/Jujuy","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Argentina/La_Rioja","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Argentina/Mendoza","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Argentina/Rio_Gallegos","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Argentina/Salta","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Argentina/San_Juan","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Argentina/San_Luis","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Argentina/Tucuman","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Argentina/Ushuaia","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Aruba","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Asuncion","PYT","PYT","PYST","PYST","-04:00:00","+01:00:00","1;0;10","+00:00:00","-1;0;3","+00:00:00"
"America/Atikokan","EST","EST","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/Atka","HST","HST","HDT","HDT","-10:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Bahia","BRT","BRT","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Bahia_Banderas","CST","CST","CDT","CDT","-06:00:00","+01:00:00","1;0;4","+02:00:00","-1;0;10","+02:00:00"
"America/Barbados","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Belem","BRT","BRT","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Belize","CST","CST","","","-06:00:00","+00:00:00","","","","+00:00:00"
"America/Beulah","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Blanc-Sablon","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Blanc_Sablon","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Boa_Vista","AMT","AMT","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Bogota","COT","COT","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/Boise","MST","MST","MDT","MDT","-07:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Buenos_Aires","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Cambridge_Bay","MST","MST","MDT","MDT","-07:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Campo_Grande","AMT","AMT","AMST","AMST","-04:00:00","+01:00:00","3;0;10","+00:00:00","3;0;2","+00:00:00"
"America/Cancun","EST","EST","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/Caracas","VET","VET","","","-04:30:00","+00:00:00","","","","+00:00:00"
"America/Catamarca","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Cayenne","GFT","GFT","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Cayman","EST","EST","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/Center","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Chicago","CST","Central Standard Time","CDT","Central Daylight Time","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Chihuahua","MST","MST","MDT","MDT","-07:00:00","+01:00:00","1;0;4","+02:00:00","-1;0;10","+02:00:00"
"America/ComodRivadavia","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Coral_Harbour","EST","EST","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/Cordoba","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Costa_Rica","CST","CST","","","-06:00:00","+00:00:00","","","","+00:00:00"
"America/Creston","MST","MST","","","-07:00:00","+00:00:00","","","","+00:00:00"
"America/Cuiaba","AMT","AMT","AMST","AMST","-04:00:00","+01:00:00","3;0;10","+00:00:00","3;0;2","+00:00:00"
"America/Curacao","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Danmarkshavn","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"America/Dawson","PST","PST","PDT","PDT","-08:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Dawson_Creek","MST","MST","","","-07:00:00","+00:00:00","","","","+00:00:00"
"America/Denver","MST","Mountain Standard Time","MDT","Mountain Daylight Time","-07:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Detroit","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Dominica","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Edmonton","MST","MST","MDT","MDT","-07:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Eirunepe","ACT","ACT","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/El_Salvador","CST","CST","","","-06:00:00","+00:00:00","","","","+00:00:00"
"America/Ensenada","PST","PST","PDT","PDT","-08:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Fortaleza","BRT","BRT","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Fort_Wayne","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Glace_Bay","AST","AST","ADT","ADT","-04:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Godthab","WGT","WGT","WGST","WGST","-03:00:00","+01:00:00","-1;6;3","+22:00:00","-1;6;10","+23:00:00"
"America/Goose_Bay","AST","AST","ADT","ADT","-04:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Grand_Turk","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Grenada","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Guadeloupe","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Guatemala","CST","CST","","","-06:00:00","+00:00:00","","","","+00:00:00"
"America/Guayaquil","ECT","ECT","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/Guyana","GYT","GYT","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Halifax","AST","AST","ADT","ADT","-04:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Havana","CST","CST","CDT","CDT","-05:00:00","+01:00:00","2;0;3","+00:00:00","1;0;11","+01:00:00"
"America/Hermosillo","MST","MST","","","-07:00:00","+00:00:00","","","","+00:00:00"
"America/Indiana/Indianapolis","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Indiana/Knox","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Indiana/Marengo","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Indiana/Petersburg","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Indiana/Tell_City","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Indiana/Vevay","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Indiana/Vincennes","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Indiana/Winamac","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Indianapolis","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Inuvik","MST","MST","MDT","MDT","-07:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Iqaluit","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Jamaica","EST","EST","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/Jujuy","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Juneau","AKST","AKST","AKDT","AKDT","-09:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Kentucky/Louisville","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Kentucky/Monticello","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Knox","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Knox_IN","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Kralendijk","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/La_Paz","BOT","BOT","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/La_Rioja","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Lima","PET","PET","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/Los_Angeles","PST","Pacific Standard Time","PDT","Pacific Daylight Time","-08:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Louisville","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Lower_Princes","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Maceio","BRT","BRT","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Managua","CST","CST","","","-06:00:00","+00:00:00","","","","+00:00:00"
"America/Manaus","AMT","AMT","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Marengo","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Marigot","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Martinique","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Matamoros","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Mazatlan","MST","MST","MDT","MDT","-07:00:00","+01:00:00","1;0;4","+02:00:00","-1;0;10","+02:00:00"
"America/Mendoza","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Menominee","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Merida","CST","CST","CDT","CDT","-06:00:00","+01:00:00","1;0;4","+02:00:00","-1;0;10","+02:00:00"
"America/Metlakatla","AKST","AKST","AKDT","AKDT","-09:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Mexico_City","CST","CST","CDT","CDT","-06:00:00","+01:00:00","1;0;4","+02:00:00","-1;0;10","+02:00:00"
"America/Miquelon","PMST","PMST","PMDT","PMDT","-03:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Moncton","AST","AST","ADT","ADT","-04:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Monterrey","CST","CST","CDT","CDT","-06:00:00","+01:00:00","1;0;4","+02:00:00","-1;0;10","+02:00:00"
"America/Montevideo","UYT","UYT","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Monticello","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Montreal","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Montserrat","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Nassau","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/New_Salem","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/New_York","EST","Eastern Standard Time","EDT","Eastern Daylight Time","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Nipigon","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Nome","AKST","AKST","AKDT","AKDT","-09:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Noronha","FNT","FNT","","","-02:00:00","+00:00:00","","","","+00:00:00"
"America/North_Dakota/Beulah","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/North_Dakota/Center","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/North_Dakota/New_Salem","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Ojinaga","MST","MST","MDT","MDT","-07:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Panama","EST","EST","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/Pangnirtung","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Paramaribo","SRT","SRT","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Petersburg","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Phoenix","MST","Mountain Standard Time","","","-07:00:00","+00:00:00","","","","+00:00:00"
"America/Port-au-Prince","EST","EST","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/Porto_Acre","ACT","ACT","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/Porto_Velho","AMT","AMT","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Port_au_Prince","EST","EST","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/Port_of_Spain","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Puerto_Rico","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Rainy_River","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Rankin_Inlet","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Recife","BRT","BRT","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Regina","CST","CST","","","-06:00:00","+00:00:00","","","","+00:00:00"
"America/Resolute","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Rio_Branco","ACT","ACT","","","-05:00:00","+00:00:00","","","","+00:00:00"
"America/Rio_Gallegos","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Rosario","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Salta","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Santarem","BRT","BRT","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Santa_Isabel","PST","PST","PDT","PDT","-08:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Santiago","CLT","CLT","CLST","CLST","-04:00:00","+01:00:00","2;0;8","+00:00:00","3;0;5","+00:00:00"
"America/Santo_Domingo","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/San_Juan","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/San_Luis","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Sao_Paulo","BRT","BRT","BRST","BRST","-03:00:00","+01:00:00","3;0;10","+00:00:00","3;0;2","+00:00:00"
"America/Scoresbysund","EGT","EGT","EGST","EGST","-01:00:00","+01:00:00","-1;0;3","+00:00:00","-1;0;10","+01:00:00"
"America/Shiprock","MST","MST","MDT","MDT","-07:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Sitka","AKST","AKST","AKDT","AKDT","-09:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/St_Barthelemy","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/St_Johns","NST","NST","NDT","NDT","-03:30:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/St_Kitts","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/St_Lucia","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/St_Thomas","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/St_Vincent","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Swift_Current","CST","CST","","","-06:00:00","+00:00:00","","","","+00:00:00"
"America/Tegucigalpa","CST","CST","","","-06:00:00","+00:00:00","","","","+00:00:00"
"America/Tell_City","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Thule","AST","AST","ADT","ADT","-04:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Thunder_Bay","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Tijuana","PST","PST","PDT","PDT","-08:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Toronto","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Tortola","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Tucuman","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Ushuaia","ART","ART","","","-03:00:00","+00:00:00","","","","+00:00:00"
"America/Vancouver","PST","PST","PDT","PDT","-08:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Vevay","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Vincennes","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Virgin","AST","AST","","","-04:00:00","+00:00:00","","","","+00:00:00"
"America/Whitehorse","PST","PST","PDT","PDT","-08:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Winamac","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Winnipeg","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Yakutat","AKST","AKST","AKDT","AKDT","-09:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"America/Yellowknife","MST","MST","MDT","MDT","-07:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"Antarctica/Casey","AWST","AWST","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Antarctica/Davis","DAVT","DAVT","","","+07:00:00","+00:00:00","","","","+00:00:00"
"Antarctica/DumontDUrville","DDUT","DDUT","","","+10:00:00","+00:00:00","","","","+00:00:00"
"Antarctica/Macquarie","MIST","MIST","","","+11:00:00","+00:00:00","","","","+00:00:00"
"Antarctica/Mawson","MAWT","MAWT","","","+05:00:00","+00:00:00","","","","+00:00:00"
"Antarctica/McMurdo","NZST","NZST","NZDT","NZDT","+12:00:00","+01:00:00","-1;0;9","+02:00:00","1;0;4","+03:00:00"
"Antarctica/Palmer","CLT","CLT","CLST","CLST","-04:00:00","+01:00:00","2;0;8","+00:00:00","3;0;5","+00:00:00"
"Antarctica/Rothera","ROTT","ROTT","","","-03:00:00","+00:00:00","","","","+00:00:00"
"Antarctica/South_Pole","NZST","NZST","NZDT","NZDT","+12:00:00","+01:00:00","-1;0;9","+02:00:00","1;0;4","+03:00:00"
"Antarctica/Syowa","SYOT","SYOT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Antarctica/Troll","UTC","UTC","CEST","CEST","+00:00:00","+02:00:00","-1;0;3","+01:00:00","-1;0;10","+03:00:00"
"Antarctica/Vostok","VOST","VOST","","","+06:00:00","+00:00:00","","","","+00:00:00"
"Arctic/Longyearbyen","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Asia/Aden","AST","AST","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Asia/Almaty","ALMT","ALMT","","","+06:00:00","+00:00:00","","","","+00:00:00"
"Asia/Amman","EET","EET","EEST","EEST","+02:00:00","+01:00:00","1;5;4","+00:00:00","-1;5;10","+01:00:00"
"Asia/Anadyr","ANAT","ANAT","","","+12:00:00","+00:00:00","","","","+00:00:00"
"Asia/Aqtau","AQTT","AQTT","","","+05:00:00","+00:00:00","","","","+00:00:00"
"Asia/Aqtobe","AQTT","AQTT","","","+05:00:00","+00:00:00","","","","+00:00:00"
"Asia/Ashgabat","TMT","TMT","","","+05:00:00","+00:00:00","","","","+00:00:00"
"Asia/Ashkhabad","TMT","TMT","","","+05:00:00","+00:00:00","","","","+00:00:00"
"Asia/Baghdad","AST","AST","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Asia/Bahrain","AST","AST","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Asia/Baku","AZT","AZT","","","+04:00:00","+00:00:00","","","","+00:00:00"
"Asia/Bangkok","ICT","ICT","","","+07:00:00","+00:00:00","","","","+00:00:00"
"Asia/Beirut","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+00:00:00","-1;0;10","+00:00:00"
"Asia/Bishkek","KGT","KGT","","","+06:00:00","+00:00:00","","","","+00:00:00"
"Asia/Brunei","BNT","BNT","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Calcutta","IST","IST","","","+05:30:00","+00:00:00","","","","+00:00:00"
"Asia/Chita","YAKT","YAKT","","","+09:00:00","+00:00:00","","","","+00:00:00"
"Asia/Choibalsan","CHOT","CHOT","CHOST","CHOST","+08:00:00","+01:00:00","-1;6;3","+02:00:00","-1;6;9","+00:00:00"
"Asia/Chongqing","CST","CST","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Chungking","CST","CST","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Colombo","IST","IST","","","+05:30:00","+00:00:00","","","","+00:00:00"
"Asia/Dacca","BDT","BDT","","","+06:00:00","+00:00:00","","","","+00:00:00"
"Asia/Damascus","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;5;3","+00:00:00","-1;5;10","+00:00:00"
"Asia/Dhaka","BDT","BDT","","","+06:00:00","+00:00:00","","","","+00:00:00"
"Asia/Dili","TLT","TLT","","","+09:00:00","+00:00:00","","","","+00:00:00"
"Asia/Dubai","GST","GST","","","+04:00:00","+00:00:00","","","","+00:00:00"
"Asia/Dushanbe","TJT","TJT","","","+05:00:00","+00:00:00","","","","+00:00:00"
"Asia/Gaza","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;6;3","+01:00:00","3;5;10","+00:00:00"
"Asia/Harbin","CST","CST","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Hebron","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;6;3","+01:00:00","3;5;10","+00:00:00"
"Asia/Hong_Kong","HKT","HKT","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Hovd","HOVT","HOVT","HOVST","HOVST","+07:00:00","+01:00:00","-1;6;3","+02:00:00","-1;6;9","+00:00:00"
"Asia/Ho_Chi_Minh","ICT","ICT","","","+07:00:00","+00:00:00","","","","+00:00:00"
"Asia/Irkutsk","IRKT","IRKT","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Istanbul","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Asia/Jakarta","WIB","WIB","","","+07:00:00","+00:00:00","","","","+00:00:00"
"Asia/Jayapura","WIT","WIT","","","+09:00:00","+00:00:00","","","","+00:00:00"
"Asia/Jerusalem","IST","IST","IDT","IDT","+02:00:00","+01:00:00","-1;5;3","+02:00:00","-1;0;10","+02:00:00"
"Asia/Kabul","AFT","AFT","","","+04:30:00","+00:00:00","","","","+00:00:00"
"Asia/Kamchatka","PETT","PETT","","","+12:00:00","+00:00:00","","","","+00:00:00"
"Asia/Karachi","PKT","PKT","","","+05:00:00","+00:00:00","","","","+00:00:00"
"Asia/Kashgar","XJT","XJT","","","+06:00:00","+00:00:00","","","","+00:00:00"
"Asia/Kathmandu","NPT","NPT","","","+05:45:00","+00:00:00","","","","+00:00:00"
"Asia/Katmandu","NPT","NPT","","","+05:45:00","+00:00:00","","","","+00:00:00"
"Asia/Khandyga","YAKT","YAKT","","","+09:00:00","+00:00:00","","","","+00:00:00"
"Asia/Kolkata","IST","IST","","","+05:30:00","+00:00:00","","","","+00:00:00"
"Asia/Krasnoyarsk","KRAT","KRAT","","","+07:00:00","+00:00:00","","","","+00:00:00"
"Asia/Kuala_Lumpur","MYT","MYT","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Kuching","MYT","MYT","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Kuwait","AST","AST","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Asia/Macao","CST","CST","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Macau","CST","CST","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Magadan","MAGT","MAGT","","","+10:00:00","+00:00:00","","","","+00:00:00"
"Asia/Makassar","WITA","WITA","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Manila","PHT","PHT","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Muscat","GST","GST","","","+04:00:00","+00:00:00","","","","+00:00:00"
"Asia/Nicosia","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Asia/Novokuznetsk","KRAT","KRAT","","","+07:00:00","+00:00:00","","","","+00:00:00"
"Asia/Novosibirsk","NOVT","NOVT","","","+06:00:00","+00:00:00","","","","+00:00:00"
"Asia/Omsk","OMST","OMST","","","+06:00:00","+00:00:00","","","","+00:00:00"
"Asia/Oral","ORAT","ORAT","","","+05:00:00","+00:00:00","","","","+00:00:00"
"Asia/Phnom_Penh","ICT","ICT","","","+07:00:00","+00:00:00","","","","+00:00:00"
"Asia/Pontianak","WIB","WIB","","","+07:00:00","+00:00:00","","","","+00:00:00"
"Asia/Pyongyang","KST","KST","","","+08:30:00","+00:00:00","","","","+00:00:00"
"Asia/Qatar","AST","AST","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Asia/Qyzylorda","QYZT","QYZT","","","+06:00:00","+00:00:00","","","","+00:00:00"
"Asia/Rangoon","MMT","MMT","","","+06:30:00","+00:00:00","","","","+00:00:00"
"Asia/Riyadh","AST","AST","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Asia/Saigon","ICT","ICT","","","+07:00:00","+00:00:00","","","","+00:00:00"
"Asia/Sakhalin","SAKT","SAKT","","","+11:00:00","+00:00:00","","","","+00:00:00"
"Asia/Samarkand","UZT","UZT","","","+05:00:00","+00:00:00","","","","+00:00:00"
"Asia/Seoul","KST","KST","","","+09:00:00","+00:00:00","","","","+00:00:00"
"Asia/Shanghai","CST","CST","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Singapore","SGT","SGT","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Srednekolymsk","SRET","SRET","","","+11:00:00","+00:00:00","","","","+00:00:00"
"Asia/Taipei","CST","CST","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Tashkent","UZT","UZT","","","+05:00:00","+00:00:00","","","","+00:00:00"
"Asia/Tbilisi","GET","GET","","","+04:00:00","+00:00:00","","","","+00:00:00"
"Asia/Tehran","IRST","IRST","IRDT","IRDT","+03:30:00","+01:00:00","3;1;3","+00:00:00","3;3;9","+00:00:00"
"Asia/Tel_Aviv","IST","IST","IDT","IDT","+02:00:00","+01:00:00","-1;5;3","+02:00:00","-1;0;10","+02:00:00"
"Asia/Thimbu","BTT","BTT","","","+06:00:00","+00:00:00","","","","+00:00:00"
"Asia/Thimphu","BTT","BTT","","","+06:00:00","+00:00:00","","","","+00:00:00"
"Asia/Tokyo","JST","JST","","","+09:00:00","+00:00:00","","","","+00:00:00"
"Asia/Ujung_Pandang","WITA","WITA","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Asia/Ulaanbaatar","ULAT","ULAT","ULAST","ULAST","+08:00:00","+01:00:00","-1;6;3","+02:00:00","-1;6;9","+00:00:00"
"Asia/Ulan_Bator","ULAT","ULAT","ULAST","ULAST","+08:00:00","+01:00:00","-1;6;3","+02:00:00","-1;6;9","+00:00:00"
"Asia/Urumqi","XJT","XJT","","","+06:00:00","+00:00:00","","","","+00:00:00"
"Asia/Ust-Nera","VLAT","VLAT","","","+10:00:00","+00:00:00","","","","+00:00:00"
"Asia/Ust_Nera","VLAT","VLAT","","","+10:00:00","+00:00:00","","","","+00:00:00"
"Asia/Vientiane","ICT","ICT","","","+07:00:00","+00:00:00","","","","+00:00:00"
"Asia/Vladivostok","VLAT","VLAT","","","+10:00:00","+00:00:00","","","","+00:00:00"
"Asia/Yakutsk","YAKT","YAKT","","","+09:00:00","+00:00:00","","","","+00:00:00"
"Asia/Yekaterinburg","YEKT","YEKT","","","+05:00:00","+00:00:00","","","","+00:00:00"
"Asia/Yerevan","AMT","AMT","","","+04:00:00","+00:00:00","","","","+00:00:00"
"Atlantic/Azores","AZOT","AZOT","AZOST","AZOST","-01:00:00","+01:00:00","-1;0;3","+00:00:00","-1;0;10","+01:00:00"
"Atlantic/Bermuda","AST","AST","ADT","ADT","-04:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"Atlantic/Canary","WET","WET","WEST","WEST","+00:00:00","+01:00:00","-1;0;3","+01:00:00","-1;0;10","+02:00:00"
"Atlantic/Cape_Verde","CVT","CVT","","","-01:00:00","+00:00:00","","","","+00:00:00"
"Atlantic/Faeroe","WET","WET","WEST","WEST","+00:00:00","+01:00:00","-1;0;3","+01:00:00","-1;0;10","+02:00:00"
"Atlantic/Faroe","WET","WET","WEST","WEST","+00:00:00","+01:00:00","-1;0;3","+01:00:00","-1;0;10","+02:00:00"
"Atlantic/Jan_Mayen","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Atlantic/Madeira","WET","WET","WEST","WEST","+00:00:00","+01:00:00","-1;0;3","+01:00:00","-1;0;10","+02:00:00"
"Atlantic/Reykjavik","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Atlantic/South_Georgia","GST","GST","","","-02:00:00","+00:00:00","","","","+00:00:00"
"Atlantic/Stanley","FKST","FKST","","","-03:00:00","+00:00:00","","","","+00:00:00"
"Atlantic/St_Helena","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Australia/ACT","AEST","AEST","AEDT","AEDT","+10:00:00","+01:00:00","1;0;10","+02:00:00","1;0;4","+03:00:00"
"Australia/Adelaide","ACST","ACST","ACDT","ACDT","+09:30:00","+01:00:00","1;0;10","+02:00:00","1;0;4","+03:00:00"
"Australia/Brisbane","AEST","AEST","","","+10:00:00","+00:00:00","","","","+00:00:00"
"Australia/Broken_Hill","ACST","ACST","ACDT","ACDT","+09:30:00","+01:00:00","1;0;10","+02:00:00","1;0;4","+03:00:00"
"Australia/Canberra","AEST","AEST","AEDT","AEDT","+10:00:00","+01:00:00","1;0;10","+02:00:00","1;0;4","+03:00:00"
"Australia/Currie","AEST","AEST","AEDT","AEDT","+10:00:00","+01:00:00","1;0;10","+02:00:00","1;0;4","+03:00:00"
"Australia/Darwin","ACST","ACST","","","+09:30:00","+00:00:00","","","","+00:00:00"
"Australia/Eucla","ACWST","ACWST","","","+08:45:00","+00:00:00","","","","+00:00:00"
"Australia/Hobart","AEST","AEST","AEDT","AEDT","+10:00:00","+01:00:00","1;0;10","+02:00:00","1;0;4","+03:00:00"
"Australia/LHI","LHST","LHST","LHDT","LHDT","+10:30:00","+00:30:00","1;0;10","+02:00:00","1;0;4","+02:00:00"
"Australia/Lindeman","AEST","AEST","","","+10:00:00","+00:00:00","","","","+00:00:00"
"Australia/Lord_Howe","LHST","LHST","LHDT","LHDT","+10:30:00","+00:30:00","1;0;10","+02:00:00","1;0;4","+02:00:00"
"Australia/Melbourne","AEST","AEST","AEDT","AEDT","+10:00:00","+01:00:00","1;0;10","+02:00:00","1;0;4","+03:00:00"
"Australia/North","ACST","ACST","","","+09:30:00","+00:00:00","","","","+00:00:00"
"Australia/NSW","AEST","AEST","AEDT","AEDT","+10:00:00","+01:00:00","1;0;10","+02:00:00","1;0;4","+03:00:00"
"Australia/Perth","AWST","AWST","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Australia/Queensland","AEST","AEST","","","+10:00:00","+00:00:00","","","","+00:00:00"
"Australia/South","ACST","ACST","ACDT","ACDT","+09:30:00","+01:00:00","1;0;10","+02:00:00","1;0;4","+03:00:00"
"Australia/Sydney","AEST","AEST","AEDT","AEDT","+10:00:00","+01:00:00","1;0;10","+02:00:00","1;0;4","+03:00:00"
"Australia/Tasmania","AEST","AEST","AEDT","AEDT","+10:00:00","+01:00:00","1;0;10","+02:00:00","1;0;4","+03:00:00"
"Australia/Victoria","AEST","AEST","AEDT","AEDT","+10:00:00","+01:00:00","1;0;10","+02:00:00","1;0;4","+03:00:00"
"Australia/West","AWST","AWST","","","+08:00:00","+00:00:00","","","","+00:00:00"
"Australia/Yancowinna","ACST","ACST","ACDT","ACDT","+09:30:00","+01:00:00","1;0;10","+02:00:00","1;0;4","+03:00:00"
"Brazil/Acre","ACT","ACT","","","-05:00:00","+00:00:00","","","","+00:00:00"
"Brazil/DeNoronha","FNT","FNT","","","-02:00:00","+00:00:00","","","","+00:00:00"
"Brazil/East","BRT","BRT","BRST","BRST","-03:00:00","+01:00:00","3;0;10","+00:00:00","3;0;2","+00:00:00"
"Brazil/West","AMT","AMT","","","-04:00:00","+00:00:00","","","","+00:00:00"
"Canada/Atlantic","AST","AST","ADT","ADT","-04:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"Canada/Central","CST","CST","CDT","CDT","-06:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"Canada/East-Saskatchewan","CST","CST","","","-06:00:00","+00:00:00","","","","+00:00:00"
"Canada/Eastern","EST","EST","EDT","EDT","-05:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"Canada/East_Saskatchewan","CST","CST","","","-06:00:00","+00:00:00","","","","+00:00:00"
"Canada/Mountain","MST","MST","MDT","MDT","-07:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"Canada/Newfoundland","NST","NST","NDT","NDT","-03:30:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"Canada/Pacific","PST","PST","PDT","PDT","-08:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"Canada/Saskatchewan","CST","CST","","","-06:00:00","+00:00:00","","","","+00:00:00"
"Canada/Yukon","PST","PST","PDT","PDT","-08:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"Chile/Continental","CLT","CLT","CLST","CLST","-04:00:00","+01:00:00","2;0;8","+00:00:00","3;0;5","+00:00:00"
"Chile/EasterIsland","EAST","EAST","EASST","EASST","-06:00:00","+01:00:00","2;6;8","+22:00:00","2;6;5","+22:00:00"
"Etc/GMT","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Etc/Greenwich","GMT","GMT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Etc/UCT","UCT","UCT","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Etc/Universal","UTC","UTC","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Etc/UTC","UTC","UTC","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Etc/Zulu","UTC","UTC","","","+00:00:00","+00:00:00","","","","+00:00:00"
"Europe/Amsterdam","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Andorra","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Athens","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Europe/Belfast","GMT","GMT","BST","BST","+00:00:00","+01:00:00","-1;0;3","+01:00:00","-1;0;10","+02:00:00"
"Europe/Belgrade","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Berlin","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Bratislava","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Brussels","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Bucharest","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Europe/Budapest","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Busingen","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Chisinau","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Copenhagen","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Dublin","GMT","GMT","IST","IST","+00:00:00","+01:00:00","-1;0;3","+01:00:00","-1;0;10","+02:00:00"
"Europe/Gibraltar","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Guernsey","GMT","GMT","BST","BST","+00:00:00","+01:00:00","-1;0;3","+01:00:00","-1;0;10","+02:00:00"
"Europe/Helsinki","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Europe/Isle_of_Man","GMT","GMT","BST","BST","+00:00:00","+01:00:00","-1;0;3","+01:00:00","-1;0;10","+02:00:00"
"Europe/Istanbul","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Europe/Jersey","GMT","GMT","BST","BST","+00:00:00","+01:00:00","-1;0;3","+01:00:00","-1;0;10","+02:00:00"
"Europe/Kaliningrad","EET","EET","","","+02:00:00","+00:00:00","","","","+00:00:00"
"Europe/Kiev","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Europe/Lisbon","WET","WET","WEST","WEST","+00:00:00","+01:00:00","-1;0;3","+01:00:00","-1;0;10","+02:00:00"
"Europe/Ljubljana","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/London","GMT","GMT","BST","BST","+00:00:00","+01:00:00","-1;0;3","+01:00:00","-1;0;10","+02:00:00"
"Europe/Luxembourg","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Madrid","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Malta","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Mariehamn","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Europe/Minsk","MSK","MSK","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Europe/Monaco","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Moscow","MSK","MSK","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Europe/Nicosia","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Europe/Oslo","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Paris","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Podgorica","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Prague","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Riga","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Europe/Rome","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Samara","SAMT","SAMT","","","+04:00:00","+00:00:00","","","","+00:00:00"
"Europe/San_Marino","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Sarajevo","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Simferopol","MSK","MSK","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Europe/Skopje","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Sofia","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Europe/Stockholm","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Tallinn","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Europe/Tirane","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Tiraspol","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Uzhgorod","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Europe/Vaduz","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Vatican","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Vienna","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Vilnius","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Europe/Volgograd","MSK","MSK","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Europe/Warsaw","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Zagreb","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Europe/Zaporozhye","EET","EET","EEST","EEST","+02:00:00","+01:00:00","-1;0;3","+03:00:00","-1;0;10","+04:00:00"
"Europe/Zurich","CET","CET","CEST","CEST","+01:00:00","+01:00:00","-1;0;3","+02:00:00","-1;0;10","+03:00:00"
"Indian/Antananarivo","EAT","EAT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Indian/Chagos","IOT","IOT","","","+06:00:00","+00:00:00","","","","+00:00:00"
"Indian/Christmas","CXT","CXT","","","+07:00:00","+00:00:00","","","","+00:00:00"
"Indian/Cocos","CCT","CCT","","","+06:30:00","+00:00:00","","","","+00:00:00"
"Indian/Comoro","EAT","EAT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Indian/Kerguelen","TFT","TFT","","","+05:00:00","+00:00:00","","","","+00:00:00"
"Indian/Mahe","SCT","SCT","","","+04:00:00","+00:00:00","","","","+00:00:00"
"Indian/Maldives","MVT","MVT","","","+05:00:00","+00:00:00","","","","+00:00:00"
"Indian/Mauritius","MUT","MUT","","","+04:00:00","+00:00:00","","","","+00:00:00"
"Indian/Mayotte","EAT","EAT","","","+03:00:00","+00:00:00","","","","+00:00:00"
"Indian/Reunion","RET","RET","","","+04:00:00","+00:00:00","","","","+00:00:00"
"Mexico/BajaNorte","PST","PST","PDT","PDT","-08:00:00","+01:00:00","2;0;3","+02:00:00","1;0;11","+02:00:00"
"Mexico/BajaSur","MST","MST","MDT","MDT","-07:00:00","+01:00:00","1;0;4","+02:00:00","-1;0;10","+02:00:00"
"Mexico/General","CST","CST","CDT","CDT","-06:00:00","+01:00:00","1;0;4","+02:00:00","-1;0;10","+02:00:00"
"Pacific/Apia","WSST","WSST","WSDT","WSDT","+13:00:00","+01:00:00","-1;0;9","+03:00:00","1;0;4","+04:00:00"
"Pacific/Auckland","NZST","NZST","NZDT","NZDT","+12:00:00","+01:00:00","-1;0;9","+02:00:00","1;0;4","+03:00:00"
"Pacific/Chatham","CHAST","CHAST","CHADT","CHADT","+12:45:00","+01:00:00","-1;0;9","+02:00:00","1;0;4","+03:00:00"
"Pacific/Chuuk","CHUT","CHUT","","","+10:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Easter","EAST","EAST","EASST","EASST","-06:00:00","+01:00:00","2;6;8","+22:00:00","2;6;5","+22:00:00"
"Pacific/Efate","VUT","VUT","","","+11:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Enderbury","PHOT","PHOT","","","+13:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Fakaofo","TKT","TKT","","","+13:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Fiji","FJT","FJT","FJST","FJST","+12:00:00","+01:00:00","1;0;11","+02:00:00","3;0;1","+03:00:00"
"Pacific/Funafuti","TVT","TVT","","","+12:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Galapagos","GALT","GALT","","","-06:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Gambier","GAMT","GAMT","","","-09:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Guadalcanal","SBT","SBT","","","+11:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Guam","ChST","ChST","","","+10:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Honolulu","HST","HST","","","-10:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Johnston","HST","HST","","","-10:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Kiritimati","LINT","LINT","","","+14:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Kosrae","KOST","KOST","","","+11:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Kwajalein","MHT","MHT","","","+12:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Majuro","MHT","MHT","","","+12:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Marquesas","MART","MART","","","-09:30:00","+00:00:00","","","","+00:00:00"
"Pacific/Midway","SST","SST","","","-11:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Nauru","NRT","NRT","","","+12:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Niue","NUT","NUT","","","-11:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Norfolk","NFT","NFT","","","+11:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Noumea","NCT","NCT","","","+11:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Pago_Pago","SST","SST","","","-11:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Palau","PWT","PWT","","","+09:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Pitcairn","PST","PST","","","-08:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Pohnpei","PONT","PONT","","","+11:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Ponape","PONT","PONT","","","+11:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Port_Moresby","PGT","PGT","","","+10:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Rarotonga","CKT","CKT","","","-10:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Saipan","ChST","ChST","","","+10:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Samoa","SST","SST","","","-11:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Tahiti","TAHT","TAHT","","","-10:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Tarawa","GILT","GILT","","","+12:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Tongatapu","TOT","TOT","","","+13:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Truk","CHUT","CHUT","","","+10:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Wake","WAKT","WAKT","","","+12:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Wallis","WFT","WFT","","","+12:00:00","+00:00:00","","","","+00:00:00"
"Pacific/Yap","CHUT","CHUT","","","+10:00:00","+00:00:00","","","","+00:00:00"
1 ID STD ABBR STD NAME DST ABBR DST NAME GMT offset DST adjustment DST Start Date rule Start time DST End date rule End time
2 Africa/Abidjan GMT GMT +00:00:00 +00:00:00 +00:00:00
3 Africa/Accra GMT GMT +00:00:00 +00:00:00 +00:00:00
4 Africa/Addis_Ababa EAT EAT +03:00:00 +00:00:00 +00:00:00
5 Africa/Algiers CET CET +01:00:00 +00:00:00 +00:00:00
6 Africa/Asmara EAT EAT +03:00:00 +00:00:00 +00:00:00
7 Africa/Asmera EAT EAT +03:00:00 +00:00:00 +00:00:00
8 Africa/Bamako GMT GMT +00:00:00 +00:00:00 +00:00:00
9 Africa/Bangui WAT WAT +01:00:00 +00:00:00 +00:00:00
10 Africa/Banjul GMT GMT +00:00:00 +00:00:00 +00:00:00
11 Africa/Bissau GMT GMT +00:00:00 +00:00:00 +00:00:00
12 Africa/Blantyre CAT CAT +02:00:00 +00:00:00 +00:00:00
13 Africa/Brazzaville WAT WAT +01:00:00 +00:00:00 +00:00:00
14 Africa/Bujumbura CAT CAT +02:00:00 +00:00:00 +00:00:00
15 Africa/Cairo EET EET +02:00:00 +00:00:00 +00:00:00
16 Africa/Casablanca WET WET WEST WEST +00:00:00 +01:00:00 2;0;7 +02:00:00 -1;0;10 +03:00:00
17 Africa/Ceuta CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
18 Africa/Conakry GMT GMT +00:00:00 +00:00:00 +00:00:00
19 Africa/Dakar GMT GMT +00:00:00 +00:00:00 +00:00:00
20 Africa/Dar_es_Salaam EAT EAT +03:00:00 +00:00:00 +00:00:00
21 Africa/Djibouti EAT EAT +03:00:00 +00:00:00 +00:00:00
22 Africa/Douala WAT WAT +01:00:00 +00:00:00 +00:00:00
23 Africa/El_Aaiun WET WET WEST WEST +00:00:00 +01:00:00 2;0;7 +02:00:00 -1;0;10 +03:00:00
24 Africa/Freetown GMT GMT +00:00:00 +00:00:00 +00:00:00
25 Africa/Gaborone CAT CAT +02:00:00 +00:00:00 +00:00:00
26 Africa/Harare CAT CAT +02:00:00 +00:00:00 +00:00:00
27 Africa/Johannesburg SAST SAST +02:00:00 +00:00:00 +00:00:00
28 Africa/Juba EAT EAT +03:00:00 +00:00:00 +00:00:00
29 Africa/Kampala EAT EAT +03:00:00 +00:00:00 +00:00:00
30 Africa/Khartoum EAT EAT +03:00:00 +00:00:00 +00:00:00
31 Africa/Kigali CAT CAT +02:00:00 +00:00:00 +00:00:00
32 Africa/Kinshasa WAT WAT +01:00:00 +00:00:00 +00:00:00
33 Africa/Lagos WAT WAT +01:00:00 +00:00:00 +00:00:00
34 Africa/Libreville WAT WAT +01:00:00 +00:00:00 +00:00:00
35 Africa/Lome GMT GMT +00:00:00 +00:00:00 +00:00:00
36 Africa/Luanda WAT WAT +01:00:00 +00:00:00 +00:00:00
37 Africa/Lubumbashi CAT CAT +02:00:00 +00:00:00 +00:00:00
38 Africa/Lusaka CAT CAT +02:00:00 +00:00:00 +00:00:00
39 Africa/Malabo WAT WAT +01:00:00 +00:00:00 +00:00:00
40 Africa/Maputo CAT CAT +02:00:00 +00:00:00 +00:00:00
41 Africa/Maseru SAST SAST +02:00:00 +00:00:00 +00:00:00
42 Africa/Mbabane SAST SAST +02:00:00 +00:00:00 +00:00:00
43 Africa/Mogadishu EAT EAT +03:00:00 +00:00:00 +00:00:00
44 Africa/Monrovia GMT GMT +00:00:00 +00:00:00 +00:00:00
45 Africa/Nairobi EAT EAT +03:00:00 +00:00:00 +00:00:00
46 Africa/Ndjamena WAT WAT +01:00:00 +00:00:00 +00:00:00
47 Africa/Niamey WAT WAT +01:00:00 +00:00:00 +00:00:00
48 Africa/Nouakchott GMT GMT +00:00:00 +00:00:00 +00:00:00
49 Africa/Ouagadougou GMT GMT +00:00:00 +00:00:00 +00:00:00
50 Africa/Porto-Novo WAT WAT +01:00:00 +00:00:00 +00:00:00
51 Africa/Porto_Novo WAT WAT +01:00:00 +00:00:00 +00:00:00
52 Africa/Sao_Tome GMT GMT +00:00:00 +00:00:00 +00:00:00
53 Africa/Timbuktu GMT GMT +00:00:00 +00:00:00 +00:00:00
54 Africa/Tripoli EET EET +02:00:00 +00:00:00 +00:00:00
55 Africa/Tunis CET CET +01:00:00 +00:00:00 +00:00:00
56 Africa/Windhoek WAT WAT WAST WAST +01:00:00 +01:00:00 1;0;9 +02:00:00 1;0;4 +02:00:00
57 America/Adak HST HST HDT HDT -10:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
58 America/Anchorage AKST AKST AKDT AKDT -09:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
59 America/Anguilla AST AST -04:00:00 +00:00:00 +00:00:00
60 America/Antigua AST AST -04:00:00 +00:00:00 +00:00:00
61 America/Araguaina BRT BRT -03:00:00 +00:00:00 +00:00:00
62 America/Argentina/Buenos_Aires ART ART -03:00:00 +00:00:00 +00:00:00
63 America/Argentina/Catamarca ART ART -03:00:00 +00:00:00 +00:00:00
64 America/Argentina/ComodRivadavia ART ART -03:00:00 +00:00:00 +00:00:00
65 America/Argentina/Cordoba ART ART -03:00:00 +00:00:00 +00:00:00
66 America/Argentina/Jujuy ART ART -03:00:00 +00:00:00 +00:00:00
67 America/Argentina/La_Rioja ART ART -03:00:00 +00:00:00 +00:00:00
68 America/Argentina/Mendoza ART ART -03:00:00 +00:00:00 +00:00:00
69 America/Argentina/Rio_Gallegos ART ART -03:00:00 +00:00:00 +00:00:00
70 America/Argentina/Salta ART ART -03:00:00 +00:00:00 +00:00:00
71 America/Argentina/San_Juan ART ART -03:00:00 +00:00:00 +00:00:00
72 America/Argentina/San_Luis ART ART -03:00:00 +00:00:00 +00:00:00
73 America/Argentina/Tucuman ART ART -03:00:00 +00:00:00 +00:00:00
74 America/Argentina/Ushuaia ART ART -03:00:00 +00:00:00 +00:00:00
75 America/Aruba AST AST -04:00:00 +00:00:00 +00:00:00
76 America/Asuncion PYT PYT PYST PYST -04:00:00 +01:00:00 1;0;10 +00:00:00 -1;0;3 +00:00:00
77 America/Atikokan EST EST -05:00:00 +00:00:00 +00:00:00
78 America/Atka HST HST HDT HDT -10:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
79 America/Bahia BRT BRT -03:00:00 +00:00:00 +00:00:00
80 America/Bahia_Banderas CST CST CDT CDT -06:00:00 +01:00:00 1;0;4 +02:00:00 -1;0;10 +02:00:00
81 America/Barbados AST AST -04:00:00 +00:00:00 +00:00:00
82 America/Belem BRT BRT -03:00:00 +00:00:00 +00:00:00
83 America/Belize CST CST -06:00:00 +00:00:00 +00:00:00
84 America/Beulah CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
85 America/Blanc-Sablon AST AST -04:00:00 +00:00:00 +00:00:00
86 America/Blanc_Sablon AST AST -04:00:00 +00:00:00 +00:00:00
87 America/Boa_Vista AMT AMT -04:00:00 +00:00:00 +00:00:00
88 America/Bogota COT COT -05:00:00 +00:00:00 +00:00:00
89 America/Boise MST MST MDT MDT -07:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
90 America/Buenos_Aires ART ART -03:00:00 +00:00:00 +00:00:00
91 America/Cambridge_Bay MST MST MDT MDT -07:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
92 America/Campo_Grande AMT AMT AMST AMST -04:00:00 +01:00:00 3;0;10 +00:00:00 3;0;2 +00:00:00
93 America/Cancun EST EST -05:00:00 +00:00:00 +00:00:00
94 America/Caracas VET VET -04:30:00 +00:00:00 +00:00:00
95 America/Catamarca ART ART -03:00:00 +00:00:00 +00:00:00
96 America/Cayenne GFT GFT -03:00:00 +00:00:00 +00:00:00
97 America/Cayman EST EST -05:00:00 +00:00:00 +00:00:00
98 America/Center CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
99 America/Chicago CST Central Standard Time CDT Central Daylight Time -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
100 America/Chihuahua MST MST MDT MDT -07:00:00 +01:00:00 1;0;4 +02:00:00 -1;0;10 +02:00:00
101 America/ComodRivadavia ART ART -03:00:00 +00:00:00 +00:00:00
102 America/Coral_Harbour EST EST -05:00:00 +00:00:00 +00:00:00
103 America/Cordoba ART ART -03:00:00 +00:00:00 +00:00:00
104 America/Costa_Rica CST CST -06:00:00 +00:00:00 +00:00:00
105 America/Creston MST MST -07:00:00 +00:00:00 +00:00:00
106 America/Cuiaba AMT AMT AMST AMST -04:00:00 +01:00:00 3;0;10 +00:00:00 3;0;2 +00:00:00
107 America/Curacao AST AST -04:00:00 +00:00:00 +00:00:00
108 America/Danmarkshavn GMT GMT +00:00:00 +00:00:00 +00:00:00
109 America/Dawson PST PST PDT PDT -08:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
110 America/Dawson_Creek MST MST -07:00:00 +00:00:00 +00:00:00
111 America/Denver MST Mountain Standard Time MDT Mountain Daylight Time -07:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
112 America/Detroit EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
113 America/Dominica AST AST -04:00:00 +00:00:00 +00:00:00
114 America/Edmonton MST MST MDT MDT -07:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
115 America/Eirunepe ACT ACT -05:00:00 +00:00:00 +00:00:00
116 America/El_Salvador CST CST -06:00:00 +00:00:00 +00:00:00
117 America/Ensenada PST PST PDT PDT -08:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
118 America/Fortaleza BRT BRT -03:00:00 +00:00:00 +00:00:00
119 America/Fort_Wayne EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
120 America/Glace_Bay AST AST ADT ADT -04:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
121 America/Godthab WGT WGT WGST WGST -03:00:00 +01:00:00 -1;6;3 +22:00:00 -1;6;10 +23:00:00
122 America/Goose_Bay AST AST ADT ADT -04:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
123 America/Grand_Turk AST AST -04:00:00 +00:00:00 +00:00:00
124 America/Grenada AST AST -04:00:00 +00:00:00 +00:00:00
125 America/Guadeloupe AST AST -04:00:00 +00:00:00 +00:00:00
126 America/Guatemala CST CST -06:00:00 +00:00:00 +00:00:00
127 America/Guayaquil ECT ECT -05:00:00 +00:00:00 +00:00:00
128 America/Guyana GYT GYT -04:00:00 +00:00:00 +00:00:00
129 America/Halifax AST AST ADT ADT -04:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
130 America/Havana CST CST CDT CDT -05:00:00 +01:00:00 2;0;3 +00:00:00 1;0;11 +01:00:00
131 America/Hermosillo MST MST -07:00:00 +00:00:00 +00:00:00
132 America/Indiana/Indianapolis EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
133 America/Indiana/Knox CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
134 America/Indiana/Marengo EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
135 America/Indiana/Petersburg EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
136 America/Indiana/Tell_City CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
137 America/Indiana/Vevay EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
138 America/Indiana/Vincennes EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
139 America/Indiana/Winamac EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
140 America/Indianapolis EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
141 America/Inuvik MST MST MDT MDT -07:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
142 America/Iqaluit EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
143 America/Jamaica EST EST -05:00:00 +00:00:00 +00:00:00
144 America/Jujuy ART ART -03:00:00 +00:00:00 +00:00:00
145 America/Juneau AKST AKST AKDT AKDT -09:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
146 America/Kentucky/Louisville EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
147 America/Kentucky/Monticello EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
148 America/Knox CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
149 America/Knox_IN CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
150 America/Kralendijk AST AST -04:00:00 +00:00:00 +00:00:00
151 America/La_Paz BOT BOT -04:00:00 +00:00:00 +00:00:00
152 America/La_Rioja ART ART -03:00:00 +00:00:00 +00:00:00
153 America/Lima PET PET -05:00:00 +00:00:00 +00:00:00
154 America/Los_Angeles PST Pacific Standard Time PDT Pacific Daylight Time -08:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
155 America/Louisville EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
156 America/Lower_Princes AST AST -04:00:00 +00:00:00 +00:00:00
157 America/Maceio BRT BRT -03:00:00 +00:00:00 +00:00:00
158 America/Managua CST CST -06:00:00 +00:00:00 +00:00:00
159 America/Manaus AMT AMT -04:00:00 +00:00:00 +00:00:00
160 America/Marengo EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
161 America/Marigot AST AST -04:00:00 +00:00:00 +00:00:00
162 America/Martinique AST AST -04:00:00 +00:00:00 +00:00:00
163 America/Matamoros CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
164 America/Mazatlan MST MST MDT MDT -07:00:00 +01:00:00 1;0;4 +02:00:00 -1;0;10 +02:00:00
165 America/Mendoza ART ART -03:00:00 +00:00:00 +00:00:00
166 America/Menominee CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
167 America/Merida CST CST CDT CDT -06:00:00 +01:00:00 1;0;4 +02:00:00 -1;0;10 +02:00:00
168 America/Metlakatla AKST AKST AKDT AKDT -09:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
169 America/Mexico_City CST CST CDT CDT -06:00:00 +01:00:00 1;0;4 +02:00:00 -1;0;10 +02:00:00
170 America/Miquelon PMST PMST PMDT PMDT -03:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
171 America/Moncton AST AST ADT ADT -04:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
172 America/Monterrey CST CST CDT CDT -06:00:00 +01:00:00 1;0;4 +02:00:00 -1;0;10 +02:00:00
173 America/Montevideo UYT UYT -03:00:00 +00:00:00 +00:00:00
174 America/Monticello EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
175 America/Montreal EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
176 America/Montserrat AST AST -04:00:00 +00:00:00 +00:00:00
177 America/Nassau EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
178 America/New_Salem CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
179 America/New_York EST Eastern Standard Time EDT Eastern Daylight Time -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
180 America/Nipigon EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
181 America/Nome AKST AKST AKDT AKDT -09:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
182 America/Noronha FNT FNT -02:00:00 +00:00:00 +00:00:00
183 America/North_Dakota/Beulah CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
184 America/North_Dakota/Center CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
185 America/North_Dakota/New_Salem CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
186 America/Ojinaga MST MST MDT MDT -07:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
187 America/Panama EST EST -05:00:00 +00:00:00 +00:00:00
188 America/Pangnirtung EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
189 America/Paramaribo SRT SRT -03:00:00 +00:00:00 +00:00:00
190 America/Petersburg EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
191 America/Phoenix MST Mountain Standard Time -07:00:00 +00:00:00 +00:00:00
192 America/Port-au-Prince EST EST -05:00:00 +00:00:00 +00:00:00
193 America/Porto_Acre ACT ACT -05:00:00 +00:00:00 +00:00:00
194 America/Porto_Velho AMT AMT -04:00:00 +00:00:00 +00:00:00
195 America/Port_au_Prince EST EST -05:00:00 +00:00:00 +00:00:00
196 America/Port_of_Spain AST AST -04:00:00 +00:00:00 +00:00:00
197 America/Puerto_Rico AST AST -04:00:00 +00:00:00 +00:00:00
198 America/Rainy_River CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
199 America/Rankin_Inlet CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
200 America/Recife BRT BRT -03:00:00 +00:00:00 +00:00:00
201 America/Regina CST CST -06:00:00 +00:00:00 +00:00:00
202 America/Resolute CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
203 America/Rio_Branco ACT ACT -05:00:00 +00:00:00 +00:00:00
204 America/Rio_Gallegos ART ART -03:00:00 +00:00:00 +00:00:00
205 America/Rosario ART ART -03:00:00 +00:00:00 +00:00:00
206 America/Salta ART ART -03:00:00 +00:00:00 +00:00:00
207 America/Santarem BRT BRT -03:00:00 +00:00:00 +00:00:00
208 America/Santa_Isabel PST PST PDT PDT -08:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
209 America/Santiago CLT CLT CLST CLST -04:00:00 +01:00:00 2;0;8 +00:00:00 3;0;5 +00:00:00
210 America/Santo_Domingo AST AST -04:00:00 +00:00:00 +00:00:00
211 America/San_Juan ART ART -03:00:00 +00:00:00 +00:00:00
212 America/San_Luis ART ART -03:00:00 +00:00:00 +00:00:00
213 America/Sao_Paulo BRT BRT BRST BRST -03:00:00 +01:00:00 3;0;10 +00:00:00 3;0;2 +00:00:00
214 America/Scoresbysund EGT EGT EGST EGST -01:00:00 +01:00:00 -1;0;3 +00:00:00 -1;0;10 +01:00:00
215 America/Shiprock MST MST MDT MDT -07:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
216 America/Sitka AKST AKST AKDT AKDT -09:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
217 America/St_Barthelemy AST AST -04:00:00 +00:00:00 +00:00:00
218 America/St_Johns NST NST NDT NDT -03:30:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
219 America/St_Kitts AST AST -04:00:00 +00:00:00 +00:00:00
220 America/St_Lucia AST AST -04:00:00 +00:00:00 +00:00:00
221 America/St_Thomas AST AST -04:00:00 +00:00:00 +00:00:00
222 America/St_Vincent AST AST -04:00:00 +00:00:00 +00:00:00
223 America/Swift_Current CST CST -06:00:00 +00:00:00 +00:00:00
224 America/Tegucigalpa CST CST -06:00:00 +00:00:00 +00:00:00
225 America/Tell_City CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
226 America/Thule AST AST ADT ADT -04:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
227 America/Thunder_Bay EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
228 America/Tijuana PST PST PDT PDT -08:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
229 America/Toronto EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
230 America/Tortola AST AST -04:00:00 +00:00:00 +00:00:00
231 America/Tucuman ART ART -03:00:00 +00:00:00 +00:00:00
232 America/Ushuaia ART ART -03:00:00 +00:00:00 +00:00:00
233 America/Vancouver PST PST PDT PDT -08:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
234 America/Vevay EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
235 America/Vincennes EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
236 America/Virgin AST AST -04:00:00 +00:00:00 +00:00:00
237 America/Whitehorse PST PST PDT PDT -08:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
238 America/Winamac EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
239 America/Winnipeg CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
240 America/Yakutat AKST AKST AKDT AKDT -09:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
241 America/Yellowknife MST MST MDT MDT -07:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
242 Antarctica/Casey AWST AWST +08:00:00 +00:00:00 +00:00:00
243 Antarctica/Davis DAVT DAVT +07:00:00 +00:00:00 +00:00:00
244 Antarctica/DumontDUrville DDUT DDUT +10:00:00 +00:00:00 +00:00:00
245 Antarctica/Macquarie MIST MIST +11:00:00 +00:00:00 +00:00:00
246 Antarctica/Mawson MAWT MAWT +05:00:00 +00:00:00 +00:00:00
247 Antarctica/McMurdo NZST NZST NZDT NZDT +12:00:00 +01:00:00 -1;0;9 +02:00:00 1;0;4 +03:00:00
248 Antarctica/Palmer CLT CLT CLST CLST -04:00:00 +01:00:00 2;0;8 +00:00:00 3;0;5 +00:00:00
249 Antarctica/Rothera ROTT ROTT -03:00:00 +00:00:00 +00:00:00
250 Antarctica/South_Pole NZST NZST NZDT NZDT +12:00:00 +01:00:00 -1;0;9 +02:00:00 1;0;4 +03:00:00
251 Antarctica/Syowa SYOT SYOT +03:00:00 +00:00:00 +00:00:00
252 Antarctica/Troll UTC UTC CEST CEST +00:00:00 +02:00:00 -1;0;3 +01:00:00 -1;0;10 +03:00:00
253 Antarctica/Vostok VOST VOST +06:00:00 +00:00:00 +00:00:00
254 Arctic/Longyearbyen CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
255 Asia/Aden AST AST +03:00:00 +00:00:00 +00:00:00
256 Asia/Almaty ALMT ALMT +06:00:00 +00:00:00 +00:00:00
257 Asia/Amman EET EET EEST EEST +02:00:00 +01:00:00 1;5;4 +00:00:00 -1;5;10 +01:00:00
258 Asia/Anadyr ANAT ANAT +12:00:00 +00:00:00 +00:00:00
259 Asia/Aqtau AQTT AQTT +05:00:00 +00:00:00 +00:00:00
260 Asia/Aqtobe AQTT AQTT +05:00:00 +00:00:00 +00:00:00
261 Asia/Ashgabat TMT TMT +05:00:00 +00:00:00 +00:00:00
262 Asia/Ashkhabad TMT TMT +05:00:00 +00:00:00 +00:00:00
263 Asia/Baghdad AST AST +03:00:00 +00:00:00 +00:00:00
264 Asia/Bahrain AST AST +03:00:00 +00:00:00 +00:00:00
265 Asia/Baku AZT AZT +04:00:00 +00:00:00 +00:00:00
266 Asia/Bangkok ICT ICT +07:00:00 +00:00:00 +00:00:00
267 Asia/Beirut EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +00:00:00 -1;0;10 +00:00:00
268 Asia/Bishkek KGT KGT +06:00:00 +00:00:00 +00:00:00
269 Asia/Brunei BNT BNT +08:00:00 +00:00:00 +00:00:00
270 Asia/Calcutta IST IST +05:30:00 +00:00:00 +00:00:00
271 Asia/Chita YAKT YAKT +09:00:00 +00:00:00 +00:00:00
272 Asia/Choibalsan CHOT CHOT CHOST CHOST +08:00:00 +01:00:00 -1;6;3 +02:00:00 -1;6;9 +00:00:00
273 Asia/Chongqing CST CST +08:00:00 +00:00:00 +00:00:00
274 Asia/Chungking CST CST +08:00:00 +00:00:00 +00:00:00
275 Asia/Colombo IST IST +05:30:00 +00:00:00 +00:00:00
276 Asia/Dacca BDT BDT +06:00:00 +00:00:00 +00:00:00
277 Asia/Damascus EET EET EEST EEST +02:00:00 +01:00:00 -1;5;3 +00:00:00 -1;5;10 +00:00:00
278 Asia/Dhaka BDT BDT +06:00:00 +00:00:00 +00:00:00
279 Asia/Dili TLT TLT +09:00:00 +00:00:00 +00:00:00
280 Asia/Dubai GST GST +04:00:00 +00:00:00 +00:00:00
281 Asia/Dushanbe TJT TJT +05:00:00 +00:00:00 +00:00:00
282 Asia/Gaza EET EET EEST EEST +02:00:00 +01:00:00 -1;6;3 +01:00:00 3;5;10 +00:00:00
283 Asia/Harbin CST CST +08:00:00 +00:00:00 +00:00:00
284 Asia/Hebron EET EET EEST EEST +02:00:00 +01:00:00 -1;6;3 +01:00:00 3;5;10 +00:00:00
285 Asia/Hong_Kong HKT HKT +08:00:00 +00:00:00 +00:00:00
286 Asia/Hovd HOVT HOVT HOVST HOVST +07:00:00 +01:00:00 -1;6;3 +02:00:00 -1;6;9 +00:00:00
287 Asia/Ho_Chi_Minh ICT ICT +07:00:00 +00:00:00 +00:00:00
288 Asia/Irkutsk IRKT IRKT +08:00:00 +00:00:00 +00:00:00
289 Asia/Istanbul EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
290 Asia/Jakarta WIB WIB +07:00:00 +00:00:00 +00:00:00
291 Asia/Jayapura WIT WIT +09:00:00 +00:00:00 +00:00:00
292 Asia/Jerusalem IST IST IDT IDT +02:00:00 +01:00:00 -1;5;3 +02:00:00 -1;0;10 +02:00:00
293 Asia/Kabul AFT AFT +04:30:00 +00:00:00 +00:00:00
294 Asia/Kamchatka PETT PETT +12:00:00 +00:00:00 +00:00:00
295 Asia/Karachi PKT PKT +05:00:00 +00:00:00 +00:00:00
296 Asia/Kashgar XJT XJT +06:00:00 +00:00:00 +00:00:00
297 Asia/Kathmandu NPT NPT +05:45:00 +00:00:00 +00:00:00
298 Asia/Katmandu NPT NPT +05:45:00 +00:00:00 +00:00:00
299 Asia/Khandyga YAKT YAKT +09:00:00 +00:00:00 +00:00:00
300 Asia/Kolkata IST IST +05:30:00 +00:00:00 +00:00:00
301 Asia/Krasnoyarsk KRAT KRAT +07:00:00 +00:00:00 +00:00:00
302 Asia/Kuala_Lumpur MYT MYT +08:00:00 +00:00:00 +00:00:00
303 Asia/Kuching MYT MYT +08:00:00 +00:00:00 +00:00:00
304 Asia/Kuwait AST AST +03:00:00 +00:00:00 +00:00:00
305 Asia/Macao CST CST +08:00:00 +00:00:00 +00:00:00
306 Asia/Macau CST CST +08:00:00 +00:00:00 +00:00:00
307 Asia/Magadan MAGT MAGT +10:00:00 +00:00:00 +00:00:00
308 Asia/Makassar WITA WITA +08:00:00 +00:00:00 +00:00:00
309 Asia/Manila PHT PHT +08:00:00 +00:00:00 +00:00:00
310 Asia/Muscat GST GST +04:00:00 +00:00:00 +00:00:00
311 Asia/Nicosia EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
312 Asia/Novokuznetsk KRAT KRAT +07:00:00 +00:00:00 +00:00:00
313 Asia/Novosibirsk NOVT NOVT +06:00:00 +00:00:00 +00:00:00
314 Asia/Omsk OMST OMST +06:00:00 +00:00:00 +00:00:00
315 Asia/Oral ORAT ORAT +05:00:00 +00:00:00 +00:00:00
316 Asia/Phnom_Penh ICT ICT +07:00:00 +00:00:00 +00:00:00
317 Asia/Pontianak WIB WIB +07:00:00 +00:00:00 +00:00:00
318 Asia/Pyongyang KST KST +08:30:00 +00:00:00 +00:00:00
319 Asia/Qatar AST AST +03:00:00 +00:00:00 +00:00:00
320 Asia/Qyzylorda QYZT QYZT +06:00:00 +00:00:00 +00:00:00
321 Asia/Rangoon MMT MMT +06:30:00 +00:00:00 +00:00:00
322 Asia/Riyadh AST AST +03:00:00 +00:00:00 +00:00:00
323 Asia/Saigon ICT ICT +07:00:00 +00:00:00 +00:00:00
324 Asia/Sakhalin SAKT SAKT +11:00:00 +00:00:00 +00:00:00
325 Asia/Samarkand UZT UZT +05:00:00 +00:00:00 +00:00:00
326 Asia/Seoul KST KST +09:00:00 +00:00:00 +00:00:00
327 Asia/Shanghai CST CST +08:00:00 +00:00:00 +00:00:00
328 Asia/Singapore SGT SGT +08:00:00 +00:00:00 +00:00:00
329 Asia/Srednekolymsk SRET SRET +11:00:00 +00:00:00 +00:00:00
330 Asia/Taipei CST CST +08:00:00 +00:00:00 +00:00:00
331 Asia/Tashkent UZT UZT +05:00:00 +00:00:00 +00:00:00
332 Asia/Tbilisi GET GET +04:00:00 +00:00:00 +00:00:00
333 Asia/Tehran IRST IRST IRDT IRDT +03:30:00 +01:00:00 3;1;3 +00:00:00 3;3;9 +00:00:00
334 Asia/Tel_Aviv IST IST IDT IDT +02:00:00 +01:00:00 -1;5;3 +02:00:00 -1;0;10 +02:00:00
335 Asia/Thimbu BTT BTT +06:00:00 +00:00:00 +00:00:00
336 Asia/Thimphu BTT BTT +06:00:00 +00:00:00 +00:00:00
337 Asia/Tokyo JST JST +09:00:00 +00:00:00 +00:00:00
338 Asia/Ujung_Pandang WITA WITA +08:00:00 +00:00:00 +00:00:00
339 Asia/Ulaanbaatar ULAT ULAT ULAST ULAST +08:00:00 +01:00:00 -1;6;3 +02:00:00 -1;6;9 +00:00:00
340 Asia/Ulan_Bator ULAT ULAT ULAST ULAST +08:00:00 +01:00:00 -1;6;3 +02:00:00 -1;6;9 +00:00:00
341 Asia/Urumqi XJT XJT +06:00:00 +00:00:00 +00:00:00
342 Asia/Ust-Nera VLAT VLAT +10:00:00 +00:00:00 +00:00:00
343 Asia/Ust_Nera VLAT VLAT +10:00:00 +00:00:00 +00:00:00
344 Asia/Vientiane ICT ICT +07:00:00 +00:00:00 +00:00:00
345 Asia/Vladivostok VLAT VLAT +10:00:00 +00:00:00 +00:00:00
346 Asia/Yakutsk YAKT YAKT +09:00:00 +00:00:00 +00:00:00
347 Asia/Yekaterinburg YEKT YEKT +05:00:00 +00:00:00 +00:00:00
348 Asia/Yerevan AMT AMT +04:00:00 +00:00:00 +00:00:00
349 Atlantic/Azores AZOT AZOT AZOST AZOST -01:00:00 +01:00:00 -1;0;3 +00:00:00 -1;0;10 +01:00:00
350 Atlantic/Bermuda AST AST ADT ADT -04:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
351 Atlantic/Canary WET WET WEST WEST +00:00:00 +01:00:00 -1;0;3 +01:00:00 -1;0;10 +02:00:00
352 Atlantic/Cape_Verde CVT CVT -01:00:00 +00:00:00 +00:00:00
353 Atlantic/Faeroe WET WET WEST WEST +00:00:00 +01:00:00 -1;0;3 +01:00:00 -1;0;10 +02:00:00
354 Atlantic/Faroe WET WET WEST WEST +00:00:00 +01:00:00 -1;0;3 +01:00:00 -1;0;10 +02:00:00
355 Atlantic/Jan_Mayen CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
356 Atlantic/Madeira WET WET WEST WEST +00:00:00 +01:00:00 -1;0;3 +01:00:00 -1;0;10 +02:00:00
357 Atlantic/Reykjavik GMT GMT +00:00:00 +00:00:00 +00:00:00
358 Atlantic/South_Georgia GST GST -02:00:00 +00:00:00 +00:00:00
359 Atlantic/Stanley FKST FKST -03:00:00 +00:00:00 +00:00:00
360 Atlantic/St_Helena GMT GMT +00:00:00 +00:00:00 +00:00:00
361 Australia/ACT AEST AEST AEDT AEDT +10:00:00 +01:00:00 1;0;10 +02:00:00 1;0;4 +03:00:00
362 Australia/Adelaide ACST ACST ACDT ACDT +09:30:00 +01:00:00 1;0;10 +02:00:00 1;0;4 +03:00:00
363 Australia/Brisbane AEST AEST +10:00:00 +00:00:00 +00:00:00
364 Australia/Broken_Hill ACST ACST ACDT ACDT +09:30:00 +01:00:00 1;0;10 +02:00:00 1;0;4 +03:00:00
365 Australia/Canberra AEST AEST AEDT AEDT +10:00:00 +01:00:00 1;0;10 +02:00:00 1;0;4 +03:00:00
366 Australia/Currie AEST AEST AEDT AEDT +10:00:00 +01:00:00 1;0;10 +02:00:00 1;0;4 +03:00:00
367 Australia/Darwin ACST ACST +09:30:00 +00:00:00 +00:00:00
368 Australia/Eucla ACWST ACWST +08:45:00 +00:00:00 +00:00:00
369 Australia/Hobart AEST AEST AEDT AEDT +10:00:00 +01:00:00 1;0;10 +02:00:00 1;0;4 +03:00:00
370 Australia/LHI LHST LHST LHDT LHDT +10:30:00 +00:30:00 1;0;10 +02:00:00 1;0;4 +02:00:00
371 Australia/Lindeman AEST AEST +10:00:00 +00:00:00 +00:00:00
372 Australia/Lord_Howe LHST LHST LHDT LHDT +10:30:00 +00:30:00 1;0;10 +02:00:00 1;0;4 +02:00:00
373 Australia/Melbourne AEST AEST AEDT AEDT +10:00:00 +01:00:00 1;0;10 +02:00:00 1;0;4 +03:00:00
374 Australia/North ACST ACST +09:30:00 +00:00:00 +00:00:00
375 Australia/NSW AEST AEST AEDT AEDT +10:00:00 +01:00:00 1;0;10 +02:00:00 1;0;4 +03:00:00
376 Australia/Perth AWST AWST +08:00:00 +00:00:00 +00:00:00
377 Australia/Queensland AEST AEST +10:00:00 +00:00:00 +00:00:00
378 Australia/South ACST ACST ACDT ACDT +09:30:00 +01:00:00 1;0;10 +02:00:00 1;0;4 +03:00:00
379 Australia/Sydney AEST AEST AEDT AEDT +10:00:00 +01:00:00 1;0;10 +02:00:00 1;0;4 +03:00:00
380 Australia/Tasmania AEST AEST AEDT AEDT +10:00:00 +01:00:00 1;0;10 +02:00:00 1;0;4 +03:00:00
381 Australia/Victoria AEST AEST AEDT AEDT +10:00:00 +01:00:00 1;0;10 +02:00:00 1;0;4 +03:00:00
382 Australia/West AWST AWST +08:00:00 +00:00:00 +00:00:00
383 Australia/Yancowinna ACST ACST ACDT ACDT +09:30:00 +01:00:00 1;0;10 +02:00:00 1;0;4 +03:00:00
384 Brazil/Acre ACT ACT -05:00:00 +00:00:00 +00:00:00
385 Brazil/DeNoronha FNT FNT -02:00:00 +00:00:00 +00:00:00
386 Brazil/East BRT BRT BRST BRST -03:00:00 +01:00:00 3;0;10 +00:00:00 3;0;2 +00:00:00
387 Brazil/West AMT AMT -04:00:00 +00:00:00 +00:00:00
388 Canada/Atlantic AST AST ADT ADT -04:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
389 Canada/Central CST CST CDT CDT -06:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
390 Canada/East-Saskatchewan CST CST -06:00:00 +00:00:00 +00:00:00
391 Canada/Eastern EST EST EDT EDT -05:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
392 Canada/East_Saskatchewan CST CST -06:00:00 +00:00:00 +00:00:00
393 Canada/Mountain MST MST MDT MDT -07:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
394 Canada/Newfoundland NST NST NDT NDT -03:30:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
395 Canada/Pacific PST PST PDT PDT -08:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
396 Canada/Saskatchewan CST CST -06:00:00 +00:00:00 +00:00:00
397 Canada/Yukon PST PST PDT PDT -08:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
398 Chile/Continental CLT CLT CLST CLST -04:00:00 +01:00:00 2;0;8 +00:00:00 3;0;5 +00:00:00
399 Chile/EasterIsland EAST EAST EASST EASST -06:00:00 +01:00:00 2;6;8 +22:00:00 2;6;5 +22:00:00
400 Etc/GMT GMT GMT +00:00:00 +00:00:00 +00:00:00
401 Etc/Greenwich GMT GMT +00:00:00 +00:00:00 +00:00:00
402 Etc/UCT UCT UCT +00:00:00 +00:00:00 +00:00:00
403 Etc/Universal UTC UTC +00:00:00 +00:00:00 +00:00:00
404 Etc/UTC UTC UTC +00:00:00 +00:00:00 +00:00:00
405 Etc/Zulu UTC UTC +00:00:00 +00:00:00 +00:00:00
406 Europe/Amsterdam CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
407 Europe/Andorra CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
408 Europe/Athens EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
409 Europe/Belfast GMT GMT BST BST +00:00:00 +01:00:00 -1;0;3 +01:00:00 -1;0;10 +02:00:00
410 Europe/Belgrade CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
411 Europe/Berlin CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
412 Europe/Bratislava CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
413 Europe/Brussels CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
414 Europe/Bucharest EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
415 Europe/Budapest CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
416 Europe/Busingen CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
417 Europe/Chisinau EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
418 Europe/Copenhagen CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
419 Europe/Dublin GMT GMT IST IST +00:00:00 +01:00:00 -1;0;3 +01:00:00 -1;0;10 +02:00:00
420 Europe/Gibraltar CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
421 Europe/Guernsey GMT GMT BST BST +00:00:00 +01:00:00 -1;0;3 +01:00:00 -1;0;10 +02:00:00
422 Europe/Helsinki EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
423 Europe/Isle_of_Man GMT GMT BST BST +00:00:00 +01:00:00 -1;0;3 +01:00:00 -1;0;10 +02:00:00
424 Europe/Istanbul EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
425 Europe/Jersey GMT GMT BST BST +00:00:00 +01:00:00 -1;0;3 +01:00:00 -1;0;10 +02:00:00
426 Europe/Kaliningrad EET EET +02:00:00 +00:00:00 +00:00:00
427 Europe/Kiev EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
428 Europe/Lisbon WET WET WEST WEST +00:00:00 +01:00:00 -1;0;3 +01:00:00 -1;0;10 +02:00:00
429 Europe/Ljubljana CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
430 Europe/London GMT GMT BST BST +00:00:00 +01:00:00 -1;0;3 +01:00:00 -1;0;10 +02:00:00
431 Europe/Luxembourg CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
432 Europe/Madrid CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
433 Europe/Malta CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
434 Europe/Mariehamn EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
435 Europe/Minsk MSK MSK +03:00:00 +00:00:00 +00:00:00
436 Europe/Monaco CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
437 Europe/Moscow MSK MSK +03:00:00 +00:00:00 +00:00:00
438 Europe/Nicosia EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
439 Europe/Oslo CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
440 Europe/Paris CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
441 Europe/Podgorica CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
442 Europe/Prague CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
443 Europe/Riga EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
444 Europe/Rome CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
445 Europe/Samara SAMT SAMT +04:00:00 +00:00:00 +00:00:00
446 Europe/San_Marino CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
447 Europe/Sarajevo CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
448 Europe/Simferopol MSK MSK +03:00:00 +00:00:00 +00:00:00
449 Europe/Skopje CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
450 Europe/Sofia EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
451 Europe/Stockholm CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
452 Europe/Tallinn EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
453 Europe/Tirane CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
454 Europe/Tiraspol EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
455 Europe/Uzhgorod EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
456 Europe/Vaduz CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
457 Europe/Vatican CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
458 Europe/Vienna CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
459 Europe/Vilnius EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
460 Europe/Volgograd MSK MSK +03:00:00 +00:00:00 +00:00:00
461 Europe/Warsaw CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
462 Europe/Zagreb CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
463 Europe/Zaporozhye EET EET EEST EEST +02:00:00 +01:00:00 -1;0;3 +03:00:00 -1;0;10 +04:00:00
464 Europe/Zurich CET CET CEST CEST +01:00:00 +01:00:00 -1;0;3 +02:00:00 -1;0;10 +03:00:00
465 Indian/Antananarivo EAT EAT +03:00:00 +00:00:00 +00:00:00
466 Indian/Chagos IOT IOT +06:00:00 +00:00:00 +00:00:00
467 Indian/Christmas CXT CXT +07:00:00 +00:00:00 +00:00:00
468 Indian/Cocos CCT CCT +06:30:00 +00:00:00 +00:00:00
469 Indian/Comoro EAT EAT +03:00:00 +00:00:00 +00:00:00
470 Indian/Kerguelen TFT TFT +05:00:00 +00:00:00 +00:00:00
471 Indian/Mahe SCT SCT +04:00:00 +00:00:00 +00:00:00
472 Indian/Maldives MVT MVT +05:00:00 +00:00:00 +00:00:00
473 Indian/Mauritius MUT MUT +04:00:00 +00:00:00 +00:00:00
474 Indian/Mayotte EAT EAT +03:00:00 +00:00:00 +00:00:00
475 Indian/Reunion RET RET +04:00:00 +00:00:00 +00:00:00
476 Mexico/BajaNorte PST PST PDT PDT -08:00:00 +01:00:00 2;0;3 +02:00:00 1;0;11 +02:00:00
477 Mexico/BajaSur MST MST MDT MDT -07:00:00 +01:00:00 1;0;4 +02:00:00 -1;0;10 +02:00:00
478 Mexico/General CST CST CDT CDT -06:00:00 +01:00:00 1;0;4 +02:00:00 -1;0;10 +02:00:00
479 Pacific/Apia WSST WSST WSDT WSDT +13:00:00 +01:00:00 -1;0;9 +03:00:00 1;0;4 +04:00:00
480 Pacific/Auckland NZST NZST NZDT NZDT +12:00:00 +01:00:00 -1;0;9 +02:00:00 1;0;4 +03:00:00
481 Pacific/Chatham CHAST CHAST CHADT CHADT +12:45:00 +01:00:00 -1;0;9 +02:00:00 1;0;4 +03:00:00
482 Pacific/Chuuk CHUT CHUT +10:00:00 +00:00:00 +00:00:00
483 Pacific/Easter EAST EAST EASST EASST -06:00:00 +01:00:00 2;6;8 +22:00:00 2;6;5 +22:00:00
484 Pacific/Efate VUT VUT +11:00:00 +00:00:00 +00:00:00
485 Pacific/Enderbury PHOT PHOT +13:00:00 +00:00:00 +00:00:00
486 Pacific/Fakaofo TKT TKT +13:00:00 +00:00:00 +00:00:00
487 Pacific/Fiji FJT FJT FJST FJST +12:00:00 +01:00:00 1;0;11 +02:00:00 3;0;1 +03:00:00
488 Pacific/Funafuti TVT TVT +12:00:00 +00:00:00 +00:00:00
489 Pacific/Galapagos GALT GALT -06:00:00 +00:00:00 +00:00:00
490 Pacific/Gambier GAMT GAMT -09:00:00 +00:00:00 +00:00:00
491 Pacific/Guadalcanal SBT SBT +11:00:00 +00:00:00 +00:00:00
492 Pacific/Guam ChST ChST +10:00:00 +00:00:00 +00:00:00
493 Pacific/Honolulu HST HST -10:00:00 +00:00:00 +00:00:00
494 Pacific/Johnston HST HST -10:00:00 +00:00:00 +00:00:00
495 Pacific/Kiritimati LINT LINT +14:00:00 +00:00:00 +00:00:00
496 Pacific/Kosrae KOST KOST +11:00:00 +00:00:00 +00:00:00
497 Pacific/Kwajalein MHT MHT +12:00:00 +00:00:00 +00:00:00
498 Pacific/Majuro MHT MHT +12:00:00 +00:00:00 +00:00:00
499 Pacific/Marquesas MART MART -09:30:00 +00:00:00 +00:00:00
500 Pacific/Midway SST SST -11:00:00 +00:00:00 +00:00:00
501 Pacific/Nauru NRT NRT +12:00:00 +00:00:00 +00:00:00
502 Pacific/Niue NUT NUT -11:00:00 +00:00:00 +00:00:00
503 Pacific/Norfolk NFT NFT +11:00:00 +00:00:00 +00:00:00
504 Pacific/Noumea NCT NCT +11:00:00 +00:00:00 +00:00:00
505 Pacific/Pago_Pago SST SST -11:00:00 +00:00:00 +00:00:00
506 Pacific/Palau PWT PWT +09:00:00 +00:00:00 +00:00:00
507 Pacific/Pitcairn PST PST -08:00:00 +00:00:00 +00:00:00
508 Pacific/Pohnpei PONT PONT +11:00:00 +00:00:00 +00:00:00
509 Pacific/Ponape PONT PONT +11:00:00 +00:00:00 +00:00:00
510 Pacific/Port_Moresby PGT PGT +10:00:00 +00:00:00 +00:00:00
511 Pacific/Rarotonga CKT CKT -10:00:00 +00:00:00 +00:00:00
512 Pacific/Saipan ChST ChST +10:00:00 +00:00:00 +00:00:00
513 Pacific/Samoa SST SST -11:00:00 +00:00:00 +00:00:00
514 Pacific/Tahiti TAHT TAHT -10:00:00 +00:00:00 +00:00:00
515 Pacific/Tarawa GILT GILT +12:00:00 +00:00:00 +00:00:00
516 Pacific/Tongatapu TOT TOT +13:00:00 +00:00:00 +00:00:00
517 Pacific/Truk CHUT CHUT +10:00:00 +00:00:00 +00:00:00
518 Pacific/Wake WAKT WAKT +12:00:00 +00:00:00 +00:00:00
519 Pacific/Wallis WFT WFT +12:00:00 +00:00:00 +00:00:00
520 Pacific/Yap CHUT CHUT +10:00:00 +00:00:00 +00:00:00
-91
View File
@@ -1,91 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Date-Time Terminology</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>Date-Time Terminology</h1>
<p>&nbsp;<p>
<hr>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<p>
The following are a number of terms relevant to the date-time domain.
<P>
<P>A taxonomy of temporal types:
<UL>
<LI><B>Timepoint</B> -- Specifier for a location in the time continuum.
Similar to a number on a ruler.
<LI><B>Timelength</B> -- A duration of time unattached to any point on the
time continuum.
<LI><B>Timeinterval</B> -- A duration of time attached to a specific point in
the time continuum. </LI></UL>
<P>And some other terms:
<UL>
<LI><B>Accuracy</B> -- A measure of error, the difference between the reading
of a clock and the true time.
<LI><B>Calendar System</B> -- A system for labeling time points with day level
resolution.
<LI><B>Clock Device</B> -- A software component (tied to some hardware) that
provides the current date or time with respect to a calendar or clock system.
<LI><B>Precision</B> -- A measure of repeatability of a clock.
<LI><B>Resolution</B> -- A specification of the smallest representable
duration (eg: 1 second, 1 century) for a clock/calendar system or temporal
type.
<LI><B>Stability</B> -- The property of a class which says that the underlying
representation (implementation) associated with a particular (abstract) value
will never change.
<LI><B>Time System</B> -- A system for labeling time points with higher
resolution than day-level. </LI></UL>
<P>Some standard date-time terminology:
<UL>
<LI><B>Epoch</B> -- Starting time point of a calendar or clock system.
<LI><B>DST -- Daylight savings time</B> - a local time adjustment made in some regions during the summer to shift the clock time of the daylight hours
<LI><B>Time zone</B> -- A region of the earth that provides for a 'local time'
defined by DST rules and UT offset.
<LI><B>UTC Time</B> -- Coordinated Universal Time - Civil time system as
measured at longitude zero. Kept adjusted to earth rotation by use of leap
seconds. Also known as Zulu Time. Replaced the similar system known as
Greenwich Mean Time. For more see <A
href="http://aa.usno.navy.mil/faq/docs/UT.html">http://aa.usno.navy.mil/faq/docs/UT.html</A>
<LI><B>TAI Time</B> -- A high-accuracy monotonic (need better term) time
system measured to .1 microsecond resolution by atomic clocks around the
world. Not adjusted to earth rotation. For more see <A
href="http://www.bipm.fr/enus/5_Scientific/c_time/time_server.html">http://www.bipm.fr/enus/5_Scientific/c_time/time_server.html</A>
</LI></UL>
<P>Some more experimental ones:
<UL>
<LI><B>Local Time</B> -- A time measured in a specific location of the
universe.
<LI><B>Time Label</B> -- A tuple that either completely or partially specifies
a specific date-time with respect to a calendar or clock system. This is the
year-month-day representation.
<LI><B>Adjusting Time Length</B> -- A duration that represents varying
physical durations depending on the moment in time. For example, a 1 month
duration is typically not a fixed number of days and it depends on the date it
is measured from to determine the actual length. </LI></UL>
<P>These are design sorts of terms:
<UL>
<LI><B>Generation function</B> -- A function that generates a specific set of
time points, lengths, or intervals based on one or more parameters. </LI></UL>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Sat Oct 26 08:37:53 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-111
View File
@@ -1,111 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Boost Date-Time Build-Compiler Information</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>Date-Time Build-Compiler Information</h1>
<p>&nbsp;</p>
<hr>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<a href="#overview">Overview</a> --
<a href="#options">Compilation Options</a> --
<a href="#portability">Compiler/Portability Notes</a> --
<a href="#directory">Directory Structure</a> --
<a href="#required">Required Boost Libraries</a>
<p>
<H2><a name="overview">Overview</a></H2>
<p>
The library has several functions that require the creation of a library file.
The Jamfile in the build directory will produce a library
(<font class="bold">libboost_date_time</font>) that contains these functions.
<p>
<H2><a name="options">Compilation Options</a></H2>
<p>
By default the posix_time system uses a 64 bit integer and a 32 bit
integer internally to provide nano-second level resolutions. As
an alternative, a single 64 bit integer can be used to provide a
microsecond level resolution. This alternative implementation
may provide better performance and more compact memory usage
for many applications that do not require nano-second resolutions.
<p>
The variable <b>BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG</b>, as defined in
build/Jamfile, selects between these options. To select the 64 bit
integer implementation simply remove this define from the Jamfile.
<p>
<H2><a name="portability">Compiler/Portability Notes</a></H2>
<p>
The Boost Date-Time library has been built and tested with many compilers.
However, some compilers and standard libraries have issues. While some
of these issues can be worked around, others are difficult to work
around. The following compilers fully support all aspects of the library:
<ul>
<li>GCC 3.0.3 on Linux
<li>GCC 3.1 (cygwin)
<li>MSVC 7
</ul>
<p>
In particular, a lack of support for standard locales limits the ability
of the library to support iostream based input output. For these
compilers a set of more limited string based input-output is provided.
The compilers/stadard libraries with this limitation include:
<p>
<ul>
<li>GCC 2.9x on Linux
<li>Borland 5.1.1 and 5.6
<li>MSVC 6 SP5
</ul>
Other compilers such as Comeau and Metroworks have been tested
sucessfully with earlier versions of the library.
<p>
<H2><a name="directory">Directory Structure</a></H2>
<p>
The date_time directory structure has been changed for boost submission.
<p>
The directory tree has the following structure:
<pre>
/boost/date_time -- common headers and template code
/boost/date_time/gregoran -- gregorian calendar system header files
/boost/date_time/posix_time -- posix time system headers
/libs/date_time/build -- build files and output directory
/libs/date_time/test -- test battery for generic code
/libs/date_time/test/gregorian -- test battery for the gregorian system
/libs/date_time/test/posix_time -- test battery for the posix_time system
/libs/date_time/examples/posix_time -- time example programs
/libs/date_time/examples/gregorian -- nifty example programs
/libs/date_time/src/gregorian -- cpp files for libboost_date_time
/libs/date_time/src/posix_time -- empty (one file, but no source code...)
</pre>
<p>
<H2><a name="required">Required Boost Libraries</a></H2>
<p>
The library depends on
<ul>
<li><a href="../../tokenizer/index.htm">boost.tokenizer</a>,
<li><a href="../../integer/cstdint.htm">boost.integer(cstdint)</a>,
<li><a href="../../utility/operators.htm">boost.operators</a>, and
<li><a href="../../conversion/lexical_cast.htm">boost::lexical_cast</a>
</ul>
so at least these libraries need to be installed.
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Sun Jan 19 16:22:27 MST 2003
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-94
View File
@@ -1,94 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Date-Time Concepts - Calculation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>Date-Time Concepts - Calculation</h1>
<p>&nbsp;<p>
<hr>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<a href="#timepoints">Timepoints</a> --
<a href="#durations">Durations</a> --
<a href="#intervals">Interval</a> --
<a href="#special">Special Cases</a>
<p>
<h2><a name="timepoints">Timepoints</a></h2>
<p>
This section describes some of basic arithmetic rules that can be performed with timepoints.
<PRE>
Timepoint + Duration --&gt; Timepoint
Timepoint - Duration --&gt; Timepoint
Duration + Timepoint --&gt; Undefined
Duration - Timepoint --&gt; Undefined
Timepoint + Timepoint --&gt; Undefined
Timepoint - Timepoint --&gt; Duration
</PRE>
<p>
<h2><a name="durations">Durations</a></h2>
<p>
This section describes standard operations for a time duration.
<PRE>
Duration + Duration --&gt; Duration
Duration - Duration --&gt; Duration
Duration * Integer --&gt; Duration
Integer * Duration --&gt; Duration
Duration(&#8734;) * Integer --&gt; Duration(&#8734;)
Duration(&#8734;)/Integer --&gt; Duration(&#8734;)
</PRE>
<p>
<p>
<h2><a name="intervals">Intervals</a></h2>
<p>
Here are the "operations" supported by intervals. They are based on half-open
range.
<PRE>
//These can be defined by either of 2 Timepoints or a Timepoint and Duration
Timeinterval intersects Timeinterval --&gt; bool
Timeinterval intersection Timeinterval --&gt; Timeperiod //results undefined if no intersection
Timeinterval contains Timepoint --&gt; bool
Timeinterval contains Timeinterval --&gt; bool
Timeinterval shift Duration --&gt; shift start and end by duration amount
</PRE>
<p>
<h2><a name="special">Special Cases</a></h2>
<P>In general special values such as Not A Date Time (NADT) and infinity should follow rules like floating point values. Note that it should be possible to
configure NADT based systems to throw an exception instead of result in NADT.
<PRE>
Timepoint(NADT) + Duration --&gt; Timepoint(NADT)
Timepoint(&#8734;) + Duration --&gt; Timepoint(&#8734;)
Timepoint + Duration(&infin;) --&gt; Timepoint(&#8734;)
Timepoint - Duration(&#8734;) --&gt; Timepoint(-&#8734;)
</PRE>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Sat Oct 26 07:12:02 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-108
View File
@@ -1,108 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Overall Design Goals</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>Overall Design Goals</h1>
<p>&nbsp;<p>
<hr>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<p>
<table border="1" width="95%" >
<tr><td>Category</td><td>Description</td><td>Functions</td></tr>
<tr><td>Interfaces</td>
<td>Provide concrete classes for manipulation of dates and times</td>
<td>
<ul>
<li>date, time, date_duration, time_duration, date_period, time_period, etc
<li>support for infinity - positive infinity, negative infinity
<li>iterators over time and date ranges
<li>allow date and time implemenations to be separate as much as possible
</ul>
</td>
</tr>
<tr>
<td>Calculation</td>
<td>Provide a basis for performing efficient time calculations </td>
<td>
<ul>
<li>days between dates
<li>durations of times
<li>durations of dates and times together
</ul>
</td></tr>
<tr><td>Representation Flexibility</td>
<td>Provide the maximum possible reusability and flexibility</td>
<td>
<ul>
<li>traits based customization of internal
representations for size versus resolution control
<li>Allowing the use of different epochs and resolution
(eg: seconds versus microseconds, dates starting at the
year 2000 versus dates starting in 1700)
<li>Options for configuring unique calendar
representations (Gregorian + others)
<li> the use of Julian Day number and the conversion between this and the Gregorian/Julian calendar date
<li>Allow for flexible adjustments including
leap seconds
</ul>
<tr><td>Date Calculations</td>
<td>Provide tools for date calculations</td>
<td>
<ul>
<li>provide basis for calculation of complex event specs like holidays
<li>calendar to calendar conversions
<li>provide for ability to extend to new calendar systems
</ul>
</td>
</tr>
<tr><td>Time Calculations</td>
<td>Provide concrete classes for manipulation of time</td>
<td>
<ul>
<li>provide the ability to handle cross time-zone issues
<li>provide adjustments for daylight savings time (summer time)
</ul>
</td>
</tr>
<tr><td>Clock Interfaces</td>
<td>Provide classes for retrieving time current time</td>
<td>
<ul>
<li>access to a network / high resolution time sources
<li>retrieving the current date time information to populate classes
</ul>
</td>
</tr>
<tr><td>I/O Interfaces</td>
<td>Provide input and output for time including</td>
<td>
<ul>
<li>multi-lingual support
<li>provide ISO8601 compliant time facet
<li>use I/O facets for different local behavior
</ul>
</td>
</tr>
</table>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Wed Aug 21 15:42:19 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-200
View File
@@ -1,200 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Date-Time References</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>Date-Time References</h1>
<p>&nbsp;<p>
<hr>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<p>
The following are a number of references and sources of information about the
date-time domain.
<P>
<UL>
<LI><a href="#dateref">Date References</a></LI>
<LI><a href="#timeref">Time References</a></LI>
<LI><a href="#othercpp">Other C/C++ Libraries</a></LI>
<LI><a href="#java">JAVA Date-Time Libraries</a></LI>
<LI><a href="#scripting">Scriping Language Libraries</a></LI>
<LI><a href="#commercial">Related Commerical and Fanciful Pages</a></LI>
<LI><a href="#resolution">Resolution, Precision, and Accuracy</a></LI>
</UL>
<HR>
<H3><a name="dateref">Date Calendar References</a></H3>
<P>
<UL>
<LI>ISO 8601 date time standard -- <A
href="http://www.cl.cam.ac.uk/~mgk25/iso-time.html">Summary by Markus Kuhn</A>
<LI><A
href="http://emr.cs.iit.edu/home/reingold/calendar-book/second-edition/">Calendrical
Calculations</A> book by Reingold &amp; Dershowitz
<LI>Calendar FAQ by Claus Tøndering <A
href="http://www.pauahtun.org/CalendarFAQ/cal/calendar24.html">[html]</A><A
href="http://www.pauahtun.org/CalendarFAQ/cal/calendar24.pdf">[pdf]</A>
<LI>Calendar zone <A
href="http://www.calendarzone.com/">http://www.calendarzone.com/</A>
<LI><A href="http://www.w3.org/TR/xmlschema-2/#dateTime">XML schema for date
time</A>
<LI>Will Linden's <A href="http://www.ecben.net/calendar.shtml">Calendar
Links</A>
<LI><A href="http://www21.brinkster.com/lonwolve/melt/index.htm">XMAS calendar
melt</A> </LI></UL>
<HR>
<H3><a name="timeref">Time</a></H3>
<UL>
<LI>Martin Folwer on time patterns
<UL>
<LI><A
href="http://www.aw.com/cseng/titles/0-201-89542-0/apsupp/events2-1.html">Recurring
Events for Calendars</A>
<LI>Patterns for things that <A
href="http://martinfowler.com/ap2/timeNarrative.html">Change with time</A>
</LI></UL></LI></UL>
<P>
<UL>
<LI>US National Institute of Standards and Technology <A
href="http://nist.time.gov/exhibits.html">Time Exhibits</A>
<LI>Network Time Protocol at <A href="http://www.ntp.org/">NTP.org</A>
<LI>US Navy <A href="http://tycho.usno.navy.mil/systime.html">Systems of
Time</A>
<LI><A
href="http://www.bipm.fr/enus/5_Scientific/c_time/time_1.html">International
Atomic Time</A>
<LI><A
href="http://beta.zyprexia.com/docs/pgsql/user/datatype1130.htm">Date-Time
type PostgreSQL</A> User Guide </LI></UL>
<P>
<HR>
<H3><a name="othercpp">Other C/C++ Libraries</a></H3>
<UL>
<LI><A href="http://www.cplusplus.com/ref/ctime/index.html">ctime C
</A>Standard library reference at cplusplus.com
<LI><A href="http://www.cl.cam.ac.uk/~mgk25/c-time/">XTime C extension</A>
proposal
<LI><A
href="http://david.tribble.com/text/c0xcalendar.html#author-info">Another C
library extension proposal</A> by David Tribble
<LI><A href="http://cr.yp.to/libtai.html">libTAI</A> is a C based time library
<LI><A href="http://www.twinsun.com/tz/tz-link.htm">Time Zone Database</A> C
library for managing timezones/places
<LI>International Components for Unicode by IBM (open source)
<UL>
<LI><A
href="http://oss.software.ibm.com/icu/userguide/dateCalendar.html">Calendar
Class</A>
<LI><A href="http://oss.software.ibm.com/icu/userguide/dateTime.html">Date
Time Services</A>
<LI><A
href="http://oss.software.ibm.com/icu/userguide/dateTimezone.html">Time Zone
Class</A>
<LI><A
href="http://oss.software.ibm.com/icu/userguide/formatDateTime.html">Date-Time
Formatting</A>
</UL>
<LI><A
href="http://ringside.arc.nasa.gov/www/toolkits/julian_13/aareadme.html">Julian
Library in C by Mark Showalter -- NASA</A> </LI></UL>
<P>
<P>
<HR>
<H3><a name="java">JAVA Date &amp; Time Library Quick Reference</a></H3>
<P>
<UL>
<LI><A
href="http://java.sun.com/products/jdk/1.1/docs/api/java.util.Calendar.html#_top_">Calendar
class </A>
<LI><A
href="http://java.sun.com/products/jdk/1.1/docs/api/java.util.GregorianCalendar.html#_top_">Gregorian
calendar</A>
<LI><A
href="http://java.sun.com/products/jdk/1.1/docs/api/java.util.Date.html">Date
class</A>
<LI><A
href="http://java.sun.com/products/jdk/1.1/docs/api/java.sql.Time.html#_top_">sql.time
class</A>
<LI><A
href="http://java.sun.com/products/jdk/1.1/docs/api/java.text.DateFormatSymbols.html#_top_">Date
format symbols</A>
<LI><A
href="http://java.sun.com/products/jdk/1.1/docs/api/java.text.DateFormat.html#_top_">Date
format</A>
<LI><A
href="http://java.sun.com/products/jdk/1.1/docs/api/java.text.SimpleDateFormat.html#_top_">Simple
Date Format</A>
<LI><A
href="http://java.sun.com/products/jdk/1.1/docs/api/java.util.SimpleTimeZone.html#_top_">Simple
Time Zone</A> </LI></UL>
<HR>
<H3><a name="scripting">Scripting Language Libraries</a></H3>
<UL>
<LI>A python date library <A
href="http://www.lemburg.com/files/python/mxDateTime.html">MX Date Time</A>
<LI>Perl date-time
<UL>
<LI><A
href="http://search.cpan.org/Catalog/Data_and_Data_Type/Date/">Date-Time
packages at CPAN</A>
<LI><A
href="http://search.cpan.org/doc/TWEGNER/Date-Calc-4.3-bin56Mac/Calc.pm">Date::Calc</A>
at CPAN
<LI><A
href="http://search.cpan.org/doc/MORTY/DateConvert-0.16/Convert.pm">Date::Convert</A>
calendar conversions at CPAN </LI></UL>
<LI>A PHP library <A
href="http://vlib.activefish.com/docs/vlibDate.html">Vlib Date Library</A>
</UL>
<HR>
<H3><a name="commercial">Related Commercial and Fanciful Pages</a></H3>
<UL>
<LI><A href="http://www.leapsecond.com/java/gpsclock.htm">Leapsecond.com
time</A> page
<LI><A href="http://www.worldtimeserver.com/">World Time Server / TZ
database</A>
<LI><A href="http://www.longnow.org/10kclock/clock.htm">10000 year clock</A>
at Long Now Foundation
<LI><A href="http://www.timezonesforpcs.com/">Timezones for PCs</A> </LI></UL>
<HR>
<H3><a name="resolution">Resolution, Precision, and Accuracy</a></H3>
<UL>
<LI>Definitions with pictures from <A
href="http://metrologyforum.tm.agilent.com/specs.shtml">Agilent
Technologies</A>
<LI>Another set of pictures from <A
href="http://www.teamlabs.com/catalog/performance.asp">Team Labs</A>
<LI>Definitions from <A
href="http://www.solent.ac.uk/hydrography/notes/errorthe/accuracy.htm">Southampton
Institute</A>
<LI>Definitions from <A
href="http://www.newport.com/Support/Tutorials/OptoMech/om4a.asp">Newport
Corporation</A> in the context of instrumentation </LI></UL>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Thu Sep 5 07:32:51 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-163
View File
@@ -1,163 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Date-Time Concepts - Theoretical Foundations</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>Tradeoffs: Stability, Predictability, and Approximations</h1>
<p>&nbsp;</p>
<hr>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<H2>Unavoidable Trade-offs</H2>
<p>
The library does its best to provide everything a user could want, but there are certain inherent constraints that limit what <i>any</i> temporal library can do. Specifically, a user much choose which two of the following three capabilities are desired in any particular application:
<UL>
<li>exact agreement with wall-clock time
<li>accurate math, e.g. duration calculations
<li>ability to handle timepoints in the future
</UL>
Some libraries may implicitly promise to deliver all three, but if you actually put them to the test, only two can be true at once. This limitation is not a deficiency in the design or implementation of any particular library; rather it is a consequence of the way different time systems are defined by international standards. Let's look at each of the three cases:
<p>
If you want exact agreement with wall-clock time, you must use either UTC or local time. If you compute a duration by subtracting one UTC time from another and you want an answer accurate to the second, the two times must not be too far in the future because leap seconds affect the count but are only determined about 6 months in advance. With local times a future duration calculation could be off by an entire hour, since legislatures can and do change DST rules at will.
<p>
If you want to handle wall-clock times in the future, you won't be able (in the general case) to calculate exact durations, for the same reasons described above.
<p>
If you want accurate calculations with future times, you will have to use TAI or an equivalent, but the mapping from TAI to UTC or local time depends on leap seconds, so you will not have exact agreement with wall-clock time.
<p>
<H2>Stability, Predictability, and Approximations</H2>
<p>
Here is some underlying theory that helps to explain what's going on.
Remember that a temporal type, like any abstract data type (ADT),
is a set of values together with operations on those values.
<p>
<H3>Stability</H3>
<p>
The representation of a type is <i>stable</i> if the bit pattern associated with a given value does not change over time.
A type with an unstable representation is unlikely to be of much
use to anyone, so we will insist that any temporal library use
only stable representations.
<p>
An operation on a type is stable if the result of applying the operation to a particular operand(s) does not change over time.
<p>
<H3>Predictability</H3>
<p>
Sets are most often classified into two categories: well-defined
and ill-defined. Since a type is a set, we can extend these definitions
to cover types. For any type T, there must be a predicate
<i>is_member( x )</i>
which determines whether a value x is a member of type T.
This predicate must return <i>true</i>, <i>false</i>, or <i>dont_know</i>.
<p>
If for all x, is_member( x ) returns either true or false, we
say the set T is <i>well-defined</i>.
<p>
If for any x, is_member( x ) returns dont_know, we say the
set T is <i>ill-defined</i>.
<p>
Those are the rules normally used in math. However,
because of the special characteristics of temporal
types, it is useful to refine this view and create a third category
as follows:
<p>
For any temporal type T, there must be a predicate <i>is_member( x, t )</i>
which determines whether a value x is a member of T.
The parameter t represents the time when the predicate is evaluated.
For each x<sub>i</sub>, there must be a time t<sub>i</sub> and a value v
such that:
<ul>
<li>v = true or v = false, and
<li>for all t < t<sub>i</sub>, is_member( x<sub>i</sub>, t ) returns dont_know, and
<li>for all t >= t<sub>i</sub>, is_member( x<sub>i</sub>, t ) returns v.
</ul>
t<sub>i</sub> is thus the time when we "find out" whether x<sub>i</sub> is a
member of T.
Now we can define three categories of temporal types:
<p>
If for all x<sub>i</sub>, t<sub>i</sub> = negative infinity,
we say the type T is <i>predictable</i>.
<p>
If for some x<sub>i</sub>, t<sub>i</sub> = positive infinity,
we say the type T is <i>ill-formed</i>.
<p>
Otherwise we say the type T is <i>unpredictable</i> (this
implies that for some x<sub>i</sub>, t<sub>i</sub> is finite).
<p>
Ill-formed sets are not of much practical use, so we will
not discuss them further. In plain english the above
simply says that all the values of a predictable type are
known ahead of time, but some values of an unpredictable
type are not known until some particular time.
<p>
<H3>Stability of Operations</H3>
<p>
Predictable types have a couple of important properties:
<UL>
<li> there is an order-preserving mapping from their elements onto a set of consecutive integers, and
<li> duration operations on their values are stable
</UL>
The practical effect of this is that duration calculations
can be implemented with simple integer subtraction.
Examples of predictable types are TAI timepoints and
Gregorian dates.
<p>
Unpredictable types have exactly the opposite properties:
<UL>
<li> there is no order-preserving mapping from their elements onto a set of consecutive integers, and
<li> duration operations on their values are not stable.
</UL>
Examples of unpredictable types are UTC timepoints and
Local Time timepoints.
<p>
We can refine this a little by saying that a range within
an unpredicatable type can be predictable, and operations performed
entirely on values within that range will be stable.
For example, the range of UTC timepoints from 1970-01-01
through the present is predictable, so calculations of durations within that range will be stable.
<p>
<H3>Approximations</H3>
<p>
These limitations are problematical, because important temporal
types like UTC and Local Time are in fact unpredictable, and
therefore operations on them are sometimes unstable. Yet as a practical matter we often want to perform this kind of operation, such as computing the duration between two timepoints in the future that are specified in Local Time.
<p>
The best the library can do is to provide an approximation,
which is generally possible and for most purposes will be
good enough. Of course the documentation must specify when
an answer will be approximate (and thus unstable) and how
big the error may be. In many respects calculating with unpredictable sets is analogous to the use of floating point numbers, for which results are expected to only be approximately correct. Calculating with predictable sets would then be
analagous to the user of integers, where results are expected
to be exact.
<p>
For situations where exact answers are required or instability cannot be tolerated, the user must
be able to specify this, and then the library should throw an
exception if the user requests a computation for which an
exact, stable answer is not possible.
<p>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Wed Aug 21 14:46:55 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
+18
View File
@@ -0,0 +1,18 @@
# Copyright (c) 2016 Rene Rivera
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
require-b2 5.2 ;
###############################################################################
alias boostdoc
: ../xmldoc/date_time.xml
:
: <dependency>../xmldoc//date_time_autodoc <dependency>../xmldoc//gregorian_autodoc
<dependency>../xmldoc//posix_time_autodoc <dependency>../xmldoc//local_time_autodoc
: ;
explicit boostdoc ;
alias boostrelease ;
explicit boostrelease ;
-211
View File
@@ -1,211 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>gregorian::date Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>gregorian::date</h1>
<p>&nbsp;<p>
<hr>
<p>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<font class="bold">Date Documentation</font>
<p>
<a href="class_date.html#header">Header</a> --
<a href="class_date.html#construct">Construction</a> --
<a href="class_date.html#constructfromstring">Construct from String</a> --
<a href="class_date.html#constructfromclock"> Construct from Clock</a> --
<a href="class_date.html#accessors">Accessors</a> --
<a href="class_date.html#conversiontostring">Conversion To String</a> --
<a href="class_date.html#operators">Operators</a>
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
The class boost::gregorian::date is the primary interface for date programming. In general, the date class is immutable once constructed although it does allow assignment.
<p>
Other techniques for creating dates include <a href="date_iterators.html">date iterators</a> and <a href="date_algorithms.html">date algorithms or generators</a>.
<p>
<p>
<h2><a name="header">Header</a></h2>
<pre>
#include "boost/date_time/gregorian/gregorian.hpp" //include all types plus i/o
or
#include "boost/date_time/gregorian/gregorian_types.hpp" //no i/o just types
</pre>
<h2><a name="construct">Construction</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>date(greg_year year, greg_month month, greg_day day)</td>
<td>Construct from parts of date. <b>Throws</b> bad_year,
bad_day_of_month, or bad_day_month (derivatives
of std::out_of_range) if
the year, month or day are out of range.
</td>
<td>date d(2002,Jan,10)</td></tr>
<tr><td>date(date d)</td>
<td>Copy constructor</td>
<td>date d1(d)</td></tr>
<tr><td>date(special_values sv)</td>
<td>Constructor for infinitites, not-a-date-time, max_date, and min_date</td>
<td>date d1(neg_infin);<br>date d2(pos_infin);<br>date d3(not_a_date_time);<br>date d4(max_date);<br>date d5(min_date);</td></tr>
</table>
<p>
<h2><a name="constructfromstring">Construction From String</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>date <font class="func">from_string</font>(const std::string&)</td>
<td>From delimited date string where with order year-month-day eg: 2002-1-25</td>
<td>std::string ds("2002/1/25");<br>
date d(from_string(ds))</td></tr>
<tr><td>date <font class="func">from_undelimited_string</font>(const std::string&)</td>
<td>From iso type date string where with order year-month-day eg: 20020125</td>
<td>std::string ds("20020125");<br>
date d(from_undelimited_string(ds))</td></tr>
</table>
<p>
<h2><a name="constructfromclock">Construction From Clock</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>day_clock::local_day()</td>
<td>Get the local day based on the time zone settings of the computer.</td>
<td>date d(day_clock::local_day())</td></tr>
<tr><td>day_clock::universal_day()</td>
<td>Get the UTC day.</td>
<td>date d(day_clock::universal_day())</td></tr>
</table>
<p>
<h2><a name="accessors">Accessors</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>greg_year <font class="func">year</font>() const</td>
<td>Get the year part of the date.</td>
<td>date d(2002,Jan,10); d.year() --> 2002;</td></tr>
<tr><td>greg_month <font class="func">month</font>() const</td>
<td>Get the month part of the date.</td>
<td>date d(2002,Jan,10); d.month() --> 1;</td></tr>
<tr><td>greg_day <font class="func">day</font>() const</td>
<td>Get the day part of the date.</td>
<td>date d(2002,Jan,10); d.day() --> 10;</td></tr>
<tr><td>greg_ymd <font class="func">year_month_day</font>() const</td>
<td>Return a year_month_day struct. More efficient when all 3 parts of the date are needed.</td>
<td>date d(2002,Jan,10);
<br>date::ymd_type ymd = d.year_month_day();
<br>ymd.year --> 2002, ymd.month --> 1, ymd.day --> 10</td></tr>
<tr><td>greg_day_of_week <font class="func">day_of_week</font>() const</td>
<td>Get the day of the week (eg: Sunday, Monday, etc.</td>
<td>date d(2002,Jan,10); d.day() --> Thursday;</td></tr>
<tr><td>bool <font class="func">is_infinity</font>() const</td>
<td>Returns true if date is either positive or negative infinity</td>
<td>date d(pos_infin); d.is_infinity() --> true;</td></tr>
<tr><td>bool <font class="func">is_neg_infinity</font>() const</td>
<td>Returns true if date is negative infinity</td>
<td>date d(neg_infin); d.is_neg_infinity() --> true;</td></tr>
<tr><td>bool <font class="func">is_pos_infinity</font>() const</td>
<td>Returns true if date is positive infinity</td>
<td>date d(neg_infin); d.is_pos_infinity() --> true;</td></tr>
<tr><td>bool <font class="func">is_not_a_date</font>() const</td>
<td>Returns true if value is not a date</td>
<td>date d(not_a_date_time); d.is_not_a_date() --> true;</td></tr>
<tr><td>long <font class="func">modjulian_day</font>() const</td>
<td>Returns the modified julian day for the date.</td>
<td></td></tr>
<tr><td>long <font class="func">julian_day</font>() const</td>
<td>Returns the julian day for the date.</td>
<td></td></tr>
<tr><td>int <font class="func">week_number</font>() const</td>
<td>Returns the ISO 8601 week number for the date.</td>
<td></td></tr>
</table>
<p>
<h2><a name="conversiontostring">Conversion To String</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>std::string <font class="func">to_simple_string</font>(date d)</td>
<td>To YYYY-mmm-DD string where mmm 3 char month name.</td>
<td>2002-Jan-01</td></tr>
<tr><td>std::string <font class="func">to_iso_string</font>(date d)</td>
<td>To YYYYMMDD where all components are integers.</td>
<td>20020131</td></tr>
<tr><td>std::string <font class="func">to_iso_extended_string</font>(date d)</td>
<td>To YYYY-MM-DD where all components are integers.</td>
<td>2002-01-31</td></tr>
</table>
<p>
<h2><a name="operators">Operators</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>operator&lt;&lt;</td>
<td>Stream output operator</td>
<td>date d(2002,Jan,1)<br>
std::cout &lt;&lt; d &lt;&lt; std::endl;</td></tr>
<tr><td>operator==, operator!=,<br> operator&gt;, operator&lt;
<br> operator&gt;=, operator&lt;=</td>
<td>A full complement of comparison operators</td>
<td>d1 == d2, etc</td></tr>
<tr><td>date operator+(date_duration) const</td>
<td>Return a date adding a day offset</td>
<td>date d(2002,Jan,1);
<br>date_duration dd(1);
<br>date d2 = d + dd;</td></tr>
<tr><td>date operator-(date_duration) const</td>
<td>Return a date by adding a day offset </td>
<td>date d(2002,Jan,1);
<br>date_duration dd(1);
<br>date d2 = d - dd;</td></tr>
<tr><td>date_duration operator-(date) const</td>
<td>Return a date duration by subtracting two dates</td>
<td>date d1(2002,Jan,1);
<br>date d2(2002,Jan,2);
<br>date_duration dd = d2-d1;</td></tr>
</table>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Sun Jan 19 16:01:22 MST 2003
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-111
View File
@@ -1,111 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>gregorian::date_duration Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>gregorian::date_duration</h1>
<hr>
<p>
<p>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<font class="bold">Date Documentation</font>
<p>
<a href="class_date_duration.html#header">Header</a> --
<a href="class_date_duration.html#construct">Construction</a> --
<a href="class_date_duration.html#accessors">Accessors</a> --
<a href="class_date_duration.html#operators">Operators</a>
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
The class boost::gregorian::date_duration is a simple day count used for arithmetic with <a href="class_date.html">gregorian::date</a>. A duration can be either positive or negative.
<p>
<p>
<h2><a name="header">Header</a></h2>
<pre>
#include "boost/date_time/gregorian/gregorian.hpp" //include all types plus i/o
or
#include "boost/date_time/gregorian/gregorian_types.hpp" //no i/o just types
</pre>
<p>
<h2><a name="construct">Construction</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>date_duration(long)</td>
<td>Create a duration count.</td>
<td>date_duration dd(3); //3 days</td></tr>
</table>
<p>
<h2><a name="accessors">Accessors</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>long <font class="func">days</font>() const</td>
<td>Get the day count.</td>
<td>date_duration dd(3); dd.days() --> 3</td></tr>
<tr><td>bool <font class="func">is_negative</font>() const</td>
<td>True if number of days is less than zero..</td>
<td>date_duration dd(-1); dd.is_negative() --> true</td></tr>
<tr><td>static date_duration <font class="func">unit</font>()</td>
<td>Return smallest possible unit of duration type.</td>
<td>date_duration::unit() --> date_duration(1)</td></tr>
</table>
<p>
<h2><a name="operators">Operators</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>operator==, operator!=,<br>
operator&gt;, operator&lt; <br>
operator&gt;=, operator&lt;=</td>
<td>A full complement of comparison operators</td>
<td>dd1 == dd2, etc</td></tr>
<tr><td>date_duration operator+(date_duration) const</td>
<td>Add date durations.</td>
<td>date_duration dd1(3);
<br>date_duration dd2(5);
<br>date_duration dd3 = dd1 + dd2;</td></tr>
<tr><td>date_duration operator-(date_duration) const</td>
<td>Subtract durations.</td>
<td>date_duration dd1(3);
<br>date_duration dd2(5);
<br>date_duration dd3 = dd1 - dd2;</td></tr>
</table>
<p>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Wed Aug 21 15:12:43 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-186
View File
@@ -1,186 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>gregorian::date_period Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>gregorian::date_period</h1>
<p>&nbsp;</p>
<hr>
<p>
<p>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<font class="bold">Date Period Documentation</font>
<p>
<a href="class_date_period.html#header">Header</a> --
<a href="class_date_period.html#construct">Construction</a> --
<a href="class_date_period.html#accessors">Accessors</a> --
<a href="class_date_period.html#conversiontostring">Conversion To String</a> --
<a href="class_date_period.html#operators">Operators</a> --
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
The class boost::gregorian::date_period provides direct representation
for ranges between two dates. Periods provide the ability to simplify
some types of caculations by simplifing the conditional logic of the
program. For example, testing if a date is within an irregular
schedule such as a weekend or holiday can be accomplished using
collections of date periods. This is facilitated by several methods
that allow evaluation if a date_period intersects with another date
period, and to generate the period resulting from the intersection.
The <a href="exp-period_calc.html">period calculation
example</a> provides an example of this.
<p>
Date periods used in combination with infinity values have the abilty
to represent complex concepts such as 'until further notice'.
<p>
<p>
<p>
<p>
<h2><a name="header">Header</a></h2>
<pre>
#include "boost/date_time/gregorian/gregorian.hpp" //include all types plus i/o
or
#include "boost/date_time/gregorian/gregorian_types.hpp" //no i/o just types
</pre>
<p>
<h2><a name="construct">Construction</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>date_period(date begin, date last)</td>
<td>
Create a period as [begin, last). If last is <= begin then
the period will be defined as null.
</td>
<td>date_period dp(date(2002,Jan,10), date(2002,Jan,12));</td></tr>
<tr><td>date_period(date start, date_duration len)</td>
<td>
Create a period as [begin, begin+len). If len is <= zero then
the period will be defined as null.
</td>
<td>date_period dp(date(2002,Jan,10), date_duration(2));</td></tr>
<tr><td>date_period(date_period rhs)</td>
<td>Copy constructor</td>
<td>date_period dp1(dp)</td></tr>
</table>
<p>
<p>
<h2><a name="accessors">Accessors</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>date <font class="func">begin</font>() const</td>
<td>Return first day of period.</td>
<td>date_period dp(date(2002,Jan,1), date(2002,Jan,10));<br>
dp.begin() --> 2002-Jan-01</td></tr>
<tr><td>date <font class="func">last</font>() const</td>
<td>Return last date in the period</td>
<td>date_period dp(date(2002,Jan,1), date(2002,Jan,10));<br>
dp.last() --> 2002-Jan-09</td></tr>
<tr><td>date <font class="func">end</font>() const</td>
<td>Return one past the last in period</td>
<td>date_period dp(date(2002,Jan,1), date(2002,Jan,10));<br>
dp.end() --> 2002-Jan-10</td></tr>
<tr><td>date_duration <font class="func">length</font>() const</td>
<td>Return the length of the date_period</td>
<td>date_period dp(date(2002,Jan,1), date_duration(2));<br>
dp.length() --> 2</td></tr>
<tr><td>bool <font class="func">is_null</font>() const</td>
<td>True if period is not well formed. eg: start less than end </td>
<td>date_period dp(date(2002,Jan,10), date(2002,Jan,1));<br>
dp.begin() --> true</td></tr>
<tr><td>bool <font class="func">contains</font>(date) const</td>
<td>True if date is within the period</td>
<td>date_period dp(date(2002,Jan,1), date(2002,Jan,10));<br>
dp.contains(date(2002,Jan,2)) --> true</td></tr>
<tr><td>bool <font class="func">contains</font>(date_period) const</td>
<td>True if date period is within the period</td>
<td>date_period dp1(date(2002,Jan,1), date(2002,Jan,10));<br>
date_period dp2(date(2002,Jan,2), date(2002,Jan,3));<br>
dp1.contains(dp2) --> true<br>
dp2.contains(dp1) --> false</td></tr>
<tr><td>bool <font class="func">intersects</font>(date_period) const</td>
<td>True if periods overlap</td>
<td>date_period dp1(date(2002,Jan,1), date(2002,Jan,10));<br>
date_period dp2(date(2002,Jan,2), date(2002,Jan,3));<br>
dp2.intersects(dp1) --> true</td></tr>
<tr><td>date_period <font class="func">intersection</font>(date_period) const</td>
<td>Calculate the intersection of 2 periods. Null if no intersection.</td>
<td>date_period dp1(date(2002,Jan,1), date(2002,Jan,10));<br>
date_period dp2(date(2002,Jan,2), date(2002,Jan,3));<br>
dp2.intersection(dp1) --> dp2</td></tr>
<tr><td>date_period <font class="func">merge</font>(date_period) const</td>
<td>Returns union of two periods. Null if no intersection.</td>
<td>date_period dp1(date(2002,Jan,1), date(2002,Jan,10));<br>
date_period dp2(date(2002,Jan,9), date(2002,Jan,31));<br>
dp2.merge(dp1) --> 2002-Jan-01/2002-Jan-31</td></tr>
<tr><td>date_period <font class="func">shift</font>(date_duration)</td>
<td>Add duration to both start and end.</td>
<td>date_period dp1(date(2002,Jan,1), date(2002,Jan,10));<br>
dp1.shift(date_duration(1)); --> 2002-Jan-02/2002-Jan-11</td></tr>
</table>
<p>
<h2><a name="conversiontostring">Conversion To String</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>std::string <font class="func">to_simple_string</font>(date_period dp)</td>
<td>To [YYYY-mmm-DD/YYYY-mmm-DD] string where mmm is 3 char month name.</td>
<td>[2002-Jan-01/2002-Jan-31]</td></tr>
</table>
<p>
<h2><a name="operators">Operators</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>operator&lt;&lt;</td>
<td>ostream operator for date_period. Uses facet to format time points. Typical output: [2002-Jan-01/2002-Jan-31].</td>
<td>std::cout &lt;&lt; std::endl;</td></tr>
<tr><td>operator==, operator!=,<br> operator&gt;, operator&lt;
<td>A full complement of comparison operators</td>
<td>dp1 == dp2, etc</td></tr>
<tr><td>operator&lt;</td>
<td>True if dp1.end() less than dp2.begin()</td>
<td>dp1 &lt; dp2, etc</td></tr>
<tr><td>operator&gt;</td>
<td>True if dp1.begin() greater than dp2.end()</td>
<td>dp1 &gt; dp2, etc</td></tr>
</table>
<p>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Sat Nov 2 16:51:11 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-66
View File
@@ -1,66 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Date I/O Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>Date Input/Output</h1>
<p>&nbsp;</p>
<hr>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<a href="#intro">Introduction</a> --
<a href="#classoverview">Class Overview</a>
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
The library provides for localized stream-based I/O of dates and times.
Note that this support is not supported for all compilers. See the
<a href="BuildInfo.html">build information</a> page for details.
<p>
<p>
<a name="classoverview"><h2>Class Overview</h2></a>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Class</b></td>
<td><b>Construction Parameters</b></td>
<td><b>Description</b></td></tr>
<tr><td>date_iterator</td>
<td></td>
<td>Common base class for all day level iterators.</td></tr>
<tr><td>day_iterator</td>
<td>date start_date, int day_count=1</td>
<td>Iterate day_count days at a time.</td></tr>
<tr><td>week_iterator</td>
<td>date start_date, int week_offset=1</td>
<td>Iterate week_offset weeks at a time.</td></tr>
<tr><td>month_iterator</td>
<td>date start_date, int month_offset=1</td>
<td>Iterate month_offset months. There are special rules for
handling the end of the month. These are: if start date is last
day of the month, always adjust to last day of the month.
if date is beyond the end of the month (eg: jan 31 + 1 month)
adjust back to end of month.
</td></tr>
<tr><td>year_iterator</td>
<td>date start_date, int year_offset=1</td>
<td>Iterate year_offset years</td></tr>
</table>
<hr><address><small>
<!-- hhmts start -->
Last modified: Thu Sep 5 07:26:05 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-87
View File
@@ -1,87 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>gregorian::gregorian_calendar Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>gregorian::gregorian_calendar</h1>
<p>&nbsp;<p>
<hr>
<p>
<p>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<font class="bold">Date Documentation</font>
<p>
<a href="class_gregorian_calendar.html#header">Header</a> --
<a href="class_gregorian_calendar.html#functions">Functions</a>
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
The class boost::gregorian::gregorian_calendar implements the functions
necessary to create the gregorian date system. It converts to
the year-month-day form of a date to a day number representation
and back.
<p>
For most purposes this class is simply accessed by
<a href="class_date.html">gregorian::date</a> and is not used directly
by the user. However, there are useful functions that
might be of use such as the <font class="func">end_of_month_day</font>
function.
<p>
The <a href="exp-print_month.html">print month</a> example demonstrates this.
<p>
<h2><a name="header">Header</a></h2>
<pre>
#include "boost/date_time/gregorian/gregorian.hpp" //include all types plus i/o
or
#include "boost/date_time/gregorian/gregorian_types.hpp" //no i/o just types
</pre>
<p>
<h2><a name="functions">Functions</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>static short <font class="func">day_of_week</font>(ymd_type)</td>
<td>Return the day of the week (0==Sunday, 1==Monday, etc)</td>
<td>See also gregorian::date day_of_week</td></tr>
<tr><td>static date_int_type <font class="func">day_number</font>(ymd_type)</td>
<td> Convert a ymd_type into a day number. The day number is an absolute number of days since the epoch start.</td>
<td></td></tr>
<tr><td>static short <font class="func">end_of_month_day</font>(year_type, month_type)</td>
<td>Given a year and month determine the last day of the month.</td>
<td></td></tr>
<tr><td>static ymd_type <font class="func">from_day_number</font>(date_int_type)</td>
<td> Convert a day number to a ymd struct. </td>
<td></td></tr>
<tr><td>static bool <font class="func">is_leap_year</font>(year_type)</td>
<td>Returns true if specified year is a leap year.</td>
<td>gregorian_calendar::is_leap_year(2000) --> true</td></tr>
</table>
<p>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Thu Sep 5 06:05:54 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-193
View File
@@ -1,193 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>posix_time::ptime Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>posix_time::ptime Documentation</h1>
<p>&nbsp;<p>
<hr>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<font class="bold">ptime Documentation</font>
<p>
<a href="class_ptime.html#header">Header</a> --
<a href="class_ptime.html#construct">Construction</a> --
<a href="class_ptime.html#constructfromstring">Construct from String</a> --
<a href="class_ptime.html#constructfromclock">Construct from Clock</a> --
<a href="class_ptime.html#accessors">Accessors</a> --
<a href="class_ptime.html#conversiontostring">Conversion To String</a> --
<a href="class_ptime.html#operators">Operators</a>
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
The class boost::posix_time::ptime is the primary interface for time
point manipulation. In general, the ptime class is immutable once
constructed although it does allow assignment.
<p>
Class ptime is dependent on <a href="class_date.html">gregorian::date</a>
for the interface to the date portion of a time point.
<p>
Other techniques for creating times include <a href="time_iterators.html">time iterators</a>.
<p>
<p>
<h2><a name="header">Header</a></h2>
<pre>
#include "boost/date_time/posix_time/posix_time.hpp" //include all types plus i/o
or
#include "boost/date_time/posix_time/posix_time_types.hpp" //no i/o just types
</pre>
<p>
<h2><a name="construct">Construction</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>ptime(date,time_duration)</td>
<td>Construct from a date and offset
</td>
<td>ptime t1(date(2002,Jan,10), time_duration(1,2,3));<br>
ptime t2(date(2002,Jan,10), hours(1)+nanosec(5));</td></tr>
<tr><td>ptime(ptime)</td>
<td>Copy constructor</td>
<td>ptime t3(t1)</td></tr>
</table>
<p>
<h2><a name="constructfromstring">Construction From String</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>ptime <font class="func">time_from_string</font>(const std::string&)</td>
<td>From delimited string.</td>
<td>std::string ts("2002-01-20 23:59:59.000");
<br>
ptime t(time_from_string(ts))</td></tr>
<tr><td>ptime <font class="func">from_iso_string</font>(const std::string&)</td>
<td>From non delimited iso form string.</td>
<td>std::string ts("20020131T235959");
<br>
ptime t(from_iso_string(ts))</td></tr>
</table>
<p>
<h2><a name="constructfromclock">Construction From Clock</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>static ptime second_clock::local_time();</td>
<td>Get the local time, second level resolution, based on the time zone settings of the computer.</td>
<td>ptime t(second_clock::local_time())</td></tr>
<tr><td>static ptime second_clock::universal_time()</td>
<td>Get the UTC time.</td>
<td>ptime t(second_clock::universal_day())</td></tr>
</table>
<p>
<h2><a name="accessors">Accessors</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>date <font class="func">date</font>() const</td>
<td>Get the date part of a time.</td>
<td>date d(2002,Jan,10);<br>
ptime t(d, hour(1));<br>
t.date() --> 2002-Jan-10;</td></tr>
<tr><td>time_duration <font class="func">time_of_day</font>() const</td>
<td>Get the time offset in the day.</td>
<td>date d(2002,Jan,10);<br>
ptime t(d, hour(1));<br>
t.time_of_day() --> 01:00:00;</td></tr>
</table>
<p>
<h2><a name="conversiontostring">Conversion To String</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>std::string <font class="func">to_simple_string</font>(ptime)</td>
<td>To YYYY-mmm-DD HH:MM:SS.fffffffff string where mmm 3 char month name. Fractional seconds only included if non-zero.</td>
<td>2002-Jan-01 10:00:01.123456789</td></tr>
<tr><td>std::string <font class="func">to_iso_string</font>(ptime)</td>
<td>Convert to form YYYYMMDDTHHMMSS,fffffffff where T is the date-time separator</td>
<td>20020131T100001,123456789</td></tr>
<tr><td>std::string <font class="func">to_iso_extended_string</font>(ptime)</td>
<td>Convert to form YYYY-MM-DDTHH:MM:SS,fffffffff where T is the date-time separator</td>
<td>2002-01-31T10:00:01,123456789</td></tr>
</table>
<p>
<h2><a name="operators">Operators</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>operator==, operator!=,<br> operator&gt;, operator&lt;
<br> operator&gt;=, operator&lt;=</td>
<td>A full complement of comparison operators</td>
<td>t1 == t2, etc</td></tr>
<tr><td>ptime <font class="func">operator+</font>(date_duration) const</td>
<td>Return a ptime adding a day offset</td>
<td>date d(2002,Jan,1);<br>
ptime t(d,minutes(5));<br>
date_duration dd(1); <br>
ptime t2 = t + dd;</td></tr>
<tr><td>ptime <font class="func">operator-</font>(date_duration) const</td>
<td>Return a ptime subtracting a day offset</td>
<td>date d(2002,Jan,1);<br>
ptime t(d,minutes(5));<br>
date_duration dd(1); <br>
ptime t2 = t - dd;</td></tr>
<tr><td>ptime <font class="func">operator+</font>(time_duration) const</td>
<td>Return a ptime adding a time duration</td>
<td>date d(2002,Jan,1);<br>
ptime t(d,minutes(5));<br>
ptime t2 = t + hours(1) + minutes(2);</td></tr>
<tr><td>ptime <font class="func">operator-</font>(time_duration) const</td>
<td>Return a ptime subtracting a time duration</td>
<td>date d(2002,Jan,1);<br>
ptime t(d,minutes(5));<br>
ptime t2 = t - minutes(2);</td></tr>
<tr><td>time_duration <font class="func">operator-</font>(ptime) const</td>
<td>Take the difference between two times.</td>
<td>date d(2002,Jan,1);<br>
ptime t1(d,minutes(5));<br>
ptime t2(d,seconds(5));<br>
time_duration t3 = t2 - t1;//negative result</td></tr>
</table>
<p>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Sun Oct 13 10:52:41 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-204
View File
@@ -1,204 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>posix_time::time_duration Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>posix_time::time_duration</h1>
<p>&nbsp;<p>
<hr>
<p>
<p>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<font class="bold">Time Duration Documentation</font>
<p>
<a href="class_time_duration.html#header">Header</a> --
<a href="class_time_duration.html#construct">Construction</a> --
<a href="class_time_duration.html#countbasedconstruct">Count Based Construction</a> --
<a href="class_time_duration.html#constructfromstring">Construct from String</a> --
<a href="class_time_duration.html#accessors">Accessors</a> --
<a href="class_time_duration.html#conversiontostring">Conversion To String</a> --
<a href="class_time_duration.html#operators">Operators</a>
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
The class boost::posix_time::time_duration the base type reponsible for representing a length of time. A duration can be either positive or negative.
<p>
Several small helper classes that derive from a base time_duration, as
shown below, to adjust for different resolutions. These classes can
shorten code and make the intent clearer.
<p>
<img align="middle" src="time_duration_inherit.png" alt="inherit">
<p>
As an example:
<div class="fragment"><pre>
<font class="keyword">using namespace</font> boost::gregorian;
<font class="keyword">using namespace</font> boost::posix_time;
time_duration td = hours(1) + seconds(10); <font class="comment">//01:00:01</font>
td = hours(1) + nanosec(5); <font class="comment">//01:00:00.000000005</font>
</pre></div>
<p>
Note that the existence of the higher resolution classes depends on
the installation of the library. See
<a href="BuildInfo.html">Build-Compiler Information</a> for more
information.
<p>
<h2><a name="header">Header</a></h2>
<pre>
#include "boost/date_time/posix_time/posix_time.hpp" //include all types plus i/o
or
#include "boost/date_time/posix_time/posix_time/posix_time_types.hpp" //no i/o just types
</pre>
<p>
<h2><a name="construct">Construction</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>time_duration(hours,minutes,seconds,fractional_seconds)</td>
<td>Construct ad duration from the counts</td>
<td>time_duration td(1,2,3,9); //1 hr 2 min 3 sec 9 nanoseconds</td></tr>
</table>
<p>
<h2><a name="countbasedconstruct">Construction By Count</a></h2>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>hours(long)</td>
<td>Number of hours</td>
<td>time_duration td = hours(3);</td></tr>
<tr><td>minutes(long)</td>
<td>Number of minutes</td>
<td>time_duration td = minutes(3);</td></tr>
<tr><td>seconds(long)</td>
<td>Number of seconds</td>
<td>time_duration td = seconds(3);</td></tr>
<tr><td>millisec(long)</td>
<td>Number of millisec</td>
<td>time_duration td = millisec(3);</td></tr>
<tr><td>nanosec(long)</td>
<td>Number of nanosec</td>
<td>time_duration td = nanosec(3);</td></tr>
</table>
<p>
<h2><a name="constructfromstring">Construction From String</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>time_duration <font class="func">duration_from_string</font>(const std::string&)</td>
<td>From delimited string.</td>
<td>std::string ts("23:59:59.000");
<br>
time_duraton td(duration_from_string(ts))</td></tr>
</table>
<p>
<h2><a name="accessors">Accessors</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>long <font class="func">hours</font>() const</td>
<td>Get the number of hours.</td>
<td>time_duration td(1,2,3); td.hours() --> 1</td></tr>
<tr><td>long <font class="func">minutes</font>() const</td>
<td>Get the number of minutes normalized.</td>
<td>time_duration td(1,2,3); td.minutes() --> 2</td></tr>
<tr><td>long <font class="func">seconds</font>() const</td>
<td>Get the number of seconds.</td>
<td>time_duration td(1,2,3); td.seconds() --> 3</td></tr>
<tr><td>long <font class="func">fractional_seconds</font>() const</td>
<td>Get the number of fractional seconds.</td>
<td>time_duration td(1,2,3, 1000); td.fractional_seconds() --> 1000</td></tr>
<tr><td>bool <font class="func">is_negative</font>() const</td>
<td>True if duration is negative.</td>
<td>time_duration td(-1,0,0); td.is_negative() --> true</td></tr>
<tr><td>time_duration <font class="func">invert_sign</font>() const</td>
<td>Generate a new duration with the sign inverted/</td>
<td>time_duration td(-1,0,0); td.invert_sign() --> 01:00:00</td></tr>
<tr><td>static boost::date_time::time_resolutions <font class="func">resolution</font>()</td>
<td>Describes the resolution capability of the time_duration class.</td>
<td>time_duration::resolution() --> nano</td></tr>
<tr><td>boost::int64_t <font class="func">ticks</font>()</td>
<td>Return the raw count of the duration type.</td>
<td>time_duration td(0,0,0, 1000); td.ticks() --> 1000</td></tr>
<tr><td>static time_duration <font class="func">unit</font>()</td>
<td>Return smallest possible unit of duration type (1 nanosecond).</td>
<td>time_duration::unit() --> time_duration(0,0,0,1)</td></tr>
</table>
<p>
<p>
<h2><a name="conversiontostring">Conversion To String</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>std::string <font class="func">to_simple_string</font>(time_duration)</td>
<td>To HH:MM:SS.fffffffff were fff is fractional seconds that are only included if non-zero.</td>
<td>10:00:01.123456789</td></tr>
<tr><td>std::string <font class="func">to_iso_string</font>(time_duration)</td>
<td>Convert to form HHMMSS,fffffffff.</td>
<td>100001,123456789</td></tr>
</table>
<p>
<h2><a name="operators">Operators</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>operator==, operator!=,<br>
operator&gt;, operator&lt; <br>
operator&gt;=, operator&lt;=</td>
<td>A full complement of comparison operators</td>
<td>dd1 == dd2, etc</td></tr>
<tr><td>time_duration operator+(time_duration) const</td>
<td>Add durations.</td>
<td>time_duration td1(hours(1)+minutes(2));
<br>time_duration td2(seconds(10));
<br>time_duration td3 = td1 + td2;</td></tr>
<tr><td>time_duration operator-(time_duration) const</td>
<td>Subtract durations.</td>
<td>time_duration td1(hours(1)+nanosec(2)); <br>
time_duration td2 = td1 - minutes(1);</td></tr>
</table>
<p>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Thu Feb 13 09:19:15 MST 2003
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-196
View File
@@ -1,196 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>posix_time::time_period Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>posix_time::time_period</h1>
<p>&nbsp;<p>
<hr>
<p>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<font class="bold">Time Period Documentation</font>
<p>
<a href="#header">Header</a> --
<a href="#construct">Construction</a> --
<a href="#accessors">Accessors</a> --
<a href="#conversiontostring">Conversion To String</a> --
<a href="#operators">Operators</a> --
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
The class boost::posix_time::time_period provides direct representation for ranges between two times. Periods provide the ability to simplify some types of calculations by simplifing the conditional logic of the program.
<p>
The <a href="exp-time_periods.html">time periods example</a> provides an example of using time periods.
<p>
<p>
<p>
<h2><a name="header">Header</a></h2>
<pre>
#include "boost/date_time/posix_time/posix_time.hpp" //include all types plus i/o
or
#include "boost/date_time/posix_time/posix_time_types.hpp" //no i/o just types
</pre>
<p>
<h2><a name="construct">Construction</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>time_period(ptime begin, ptime last)</td>
<td>
Create a period as [begin, last). If last is <= begin then
the period will be defined as null.
</td>
<td>date d(2002,Jan,01);<br>
ptime t(d, seconds(10)); //10 sec after midnight<br>
time_period tp(t, hours(3));</td></tr>
<tr><td>time_period(ptime start, ptime end)</td>
<td>
Create a period as [begin, begin+len). If len is <= zero then
the period will be defined as null.
</td>
<td>date d(2002,Jan,01);<br>
ptime t1(d, seconds(10)); //10 sec after midnight<br>
ptime t2(d, hours(10)); //10 hours after midnight<br>
time_period tp(t1, t2);</td></tr>
<tr><td>time_period(time_period rhs)</td>
<td>Copy constructor</td>
<td>time_period tp1(tp)</td></tr>
</table>
<p>
<p>
<h2><a name="accessors">Accessors</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>ptime <font class="func">begin</font>() const</td>
<td>Return first time of period.</td>
<td>date d(2002,Jan,01);<br>
ptime t1(d, seconds(10)); //10 sec after midnight<br>
ptime t2(d, hours(10)); //10 hours after midnight<br>
time_period tp(t1, t2);
tp.begin() --> 2002-Jan-01 00:00:10 </td></tr>
<tr><td>ptime <font class="func">last</font>() const</td>
<td>Return last time in the period</td>
<td>date d(2002,Jan,01);<br>
ptime t1(d, seconds(10)); //10 sec after midnight<br>
ptime t2(d, hours(10)); //10 hours after midnight<br>
time_period tp(t1, t2);
tp.last() --> 2002-Jan-01 09:59:59.999999999 </td></tr>
<tr><td>ptime <font class="func">end</font>() const</td>
<td>Return one past the last in period</td>
<td>date d(2002,Jan,01);<br>
ptime t1(d, seconds(10)); //10 sec after midnight<br>
ptime t2(d, hours(10)); //10 hours after midnight<br>
time_period tp(t1, t2);
tp.last() --> 2002-Jan-01 10:00:00 </td></tr>
<tr><td>time_duration <font class="func">length</font>() const</td>
<td>Return the length of the time period.</td>
<td>date d(2002,Jan,01);<br>
ptime t1(d); //midnight<br>
time_period tp(t1, hours(1));<br>
tp.length() --> 1 hour </td></tr>
<tr><td>bool <font class="func">is_null</font>() const</td>
<td>True if period is not well formed. eg: start less than end </td>
<td></td></tr>
<tr><td>bool <font class="func">contains</font>(ptime) const</td>
<td>True if ptime is within the period</td>
<td>date d(2002,Jan,01);<br>
ptime t1(d, seconds(10)); //10 sec after midnight<br>
ptime t2(d, hours(10)); //10 hours after midnight<br>
ptime t3(d, hours(2)); //2 hours after midnight<br>
time_period tp(t1, t2);
tp.contains(t3) --> true </td></tr>
<tr><td>bool <font class="func">contains</font>(time_period) const</td>
<td>True if period is within the period</td>
<td>time_period tp1(ptime(d,hours(1)), ptime(d,hours(12)));<br>
time_period tp2(ptime(d,hours(2)), ptime(d,hours(4)));<br>
tp1.contains(tp2) --> true<br>
tp2.contains(tp1) --> false</td></tr>
<tr><td>bool <font class="func">intersects</font>(time_period) const</td>
<td>True if periods overlap</td>
<td>time_period tp1(ptime(d,hours(1)), ptime(d,hours(12)));<br>
time_period tp2(ptime(d,hours(2)), ptime(d,hours(4)));<br>
tp2.intersects(tp1) --> true</td></tr>
<tr><td>time_period <font class="func">intersection</font>(time_period) const</td>
<td>Calculate the intersection of 2 periods. Null if no intersection.</td>
<td></td></tr>
<tr><td>time_period <font class="func">merge</font>(time_period) const</td>
<td>Returns union of two periods. Null if no intersection.</td>
<td></td></tr>
<tr><td>time_period <font class="func">shift</font>(date_duration)</td>
<td>Add duration to both start and end.</td>
<td></td></tr>
</table>
<p>
<h2><a name="conversiontostring">Conversion To String</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>std::string <font class="func">to_simple_string</font>(time_period dp)</td>
<td>To [YYYY-mmm-DD hh:mm:ss.fffffffff/YYYY-mmm-DD hh:mm:ss.fffffffff] string where mmm is 3 char month name.</td>
<td>[2002-Jan-01 01:25:10.000000001/2002-Jan-31 01:25:10.123456789]</td></tr>
</table>
<p>
<h2><a name="operators">Operators</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Syntax</b></td><td><b>Description</b></td><td><b>Example</b></td></tr>
<tr><td>operator&lt;&lt;</td>
<td>Output streaming operator for time duration. Uses facet to output
[date time_of_day/date time_of_day]. The default is format is
[YYYY-mmm-DD hh:mm:ss.fffffffff/YYYY-mmm-DD hh:mm:ss.fffffffff] string where
mmm is 3 char month name.
</td>
<td>[2002-Jan-01 01:25:10.000000001/2002-Jan-31 01:25:10.123456789]</td></tr>
<tr><td>operator==, operator!=
<td>Equality operators. Periods are equal if
p1.begin == p2.begin &amp;&amp; p1.last == p2.last</td>
<td>if (tp1 == tp2) {...</td></tr>
<tr><td>operator&lt;</td>
<td>Ordering with no overlap. True if tp1.end() less than tp2.begin()</td>
<td>if (tp1 &lt; tp2) {...</td></tr>
<tr><td>operator&gt;</td>
<td>Ordering with no overlap. True if tp1.begin() greater than tp2.end()</td>
<td>if (tp1 &gt; tp2) {... etc</td></tr>
<tr><td>operator&lt;=, operator&gt;=</td>
<td>Defined in terms of the other operators.</td>
<td> </tr>
</table>
<p>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Sat Nov 2 16:01:32 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-94
View File
@@ -1,94 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Date Generators / Algorithms</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>Date Generators / Algorithms</h1>
<p>&nbsp;</p>
<hr>
<p>
<p>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<font class="bold">Date Generators / Algorithms</font>
<p>
<a href="date_algorithms.html#header">Header</a> --
<a href="date_algorithms.html#classoverview">Class Overview</a>
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
Date algorithms or generators are tools for generating other dates or schedules of dates. A generator function starts with some part of a date such as a month and day and is supplied another part to then generate a concrete date. This allows the programmer to represent concepts such as "The first Sunday in February" and then create a concrete set of dates when provided with one or more years.
<p>
<div class="fragment"><pre> <font class="keyword">using</font> <font class="keyword">namespace </font>boost::gregorian;
<font class="keyword">typedef</font> boost::date_time::nth_kday_of_month&lt;date&gt;</a> nkday;
nkday ldgen(nkday::first, Monday, Sep)); <font class="comment">//US labor day</font>
date labor_day = ldgen.get_date(2002); <font class="comment">//Calculate labor day for 2002</font>
</pre></div>
<p>
The <a href="exp-print_holidays.html">print holidays example</a> shows a detailed usage example.
<p>
<h2><a name="header">Header</a></h2>
<pre>
#include "boost/date_time/date_generators.hpp"
</pre>
<p>
<h2><a name="classoverview">Class Overview</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Class</b></td>
<td><b>Construction Parameters</b></td>
<td><b>get_date Parameter</b></td>
<td><b>Description</b></td>
<td><b>Example</b></td></tr>
<tr><td><font class="el">first_kday_after</font></td>
<td><font class="el">greg_day_of_week</font> day_of_week</td>
<td><font class="el">date</font> start_day</td>
<td>Calculate something like First Sunday after Jan 1,2002</td>
<td>first_kday_after fkaf(Monday);<br>date d = fkaf.get_date(date(2002,Jan,1));<font class="comment">//2002-Jan-07</font></td></tr>
<tr><td><font class="el">first_kday_before</font></td>
<td><font class="el">greg_day_of_week</font> day_of_week</td>
<td><font class="el">date</font> start_day</td>
<td>Calculate something like First Monday before Feb 1,2002</td>
<td>first_kday_before fkbf(Monday);<br>date d = fkbf.get_date(date(2002,Feb,1));<font class="comment">//2002-Jan-28</font></td></tr>
<tr><td><font class="el">last_kday_of_month</font></td>
<td><font class="el">greg_day_of_week</font> day_of_week<br><font class="el">greg_month</font> month</td>
<td><font class="el">greg_year</font> year</td>
<td>Calculate something like last Monday of January</td>
<td>last_kday_of_month lkm(Monday,Jan);<br>date d = lkm.get_date(2002);<font class="comment">//2002-Jan-28</font></td></tr>
<tr><td><font class="el">first_kday_of_month</font></td>
<td><font class="el">greg_day_of_week</font> day_of_week<br><font class="el">greg_month</font> month</td>
<td><font class="el">greg_year</font> year</td>
<td>Calculate something like first Monday of January</td>
<td>first_kday_of_month fkm(Monday,Jan);<br>date d = fkm.get_date(2002);<font class="comment">//2002-Jan-07</font></td></tr>
<tr><td><font class="el">partial_date</font></td>
<td><font class="el">greg_day</font> day_of_month<br>
<font class="el">greg_month</font> month</td>
<td><font class="el">greg_year</font> year</td>
<td>Generates a date by applying the year to the given month and day.</td>
<td>partial_date pd(1,Jan);<br>date d = pd.get_date(2002);<font class="comment">//2002-Jan-01</font></td></tr>
</table>
<p>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Fri Nov 29 19:40:48 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-83
View File
@@ -1,83 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>gregorian::date iterators Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>gregorian::date iterators</h1>
<p>&nbsp;</p>
<hr>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<font class="bold">Date Generators / Algorithms</font>
<p>
<a href="#intro">Introduction</a> --
<a href="#header">Header</a> --
<a href="#classoverview">Class Overview</a>
<p>
<p>
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
Date iterators provide a standard mechanism for iteration through dates.
Date iterators are a model of
<a href="http://www.sgi.com/tech/stl/InputIterator.html">Input Iterator</a>
and can be used to populate collections with dates and other date generation
tasks. For example, the <a href="exp-print_month.html">print month</a> example iterates through all the days in a month and prints them.
<p>
All of the iterators here derive from boost::gregorian::date_iterator.
<p>
<h2><a name="header">Header</a></h2>
<pre>
#include "boost/date_time/gregorian/gregorian.hpp" //include all types plus i/o
or
#include "boost/date_time/gregorian/gregorian_types.hpp" //no i/o just types
</pre>
<p>
<h2><a name="classoverview">Class Overview</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Class</b></td>
<td><b>Construction Parameters</b></td>
<td><b>Description</b></td></tr>
<tr><td>date_iterator</td>
<td></td>
<td>Common base class for all day level iterators.</td></tr>
<tr><td>day_iterator</td>
<td>date start_date, int day_count=1</td>
<td>Iterate day_count days at a time.</td></tr>
<tr><td>week_iterator</td>
<td>date start_date, int week_offset=1</td>
<td>Iterate week_offset weeks at a time.</td></tr>
<tr><td>month_iterator</td>
<td>date start_date, int month_offset=1</td>
<td>Iterate month_offset months. There are special rules for
handling the end of the month. These are: if start date is last
day of the month, always adjust to last day of the month.
if date is beyond the end of the month (eg: jan 31 + 1 month)
adjust back to end of month.
</td></tr>
<tr><td>year_iterator</td>
<td>date start_date, int year_offset=1</td>
<td>Iterate year_offset years</td></tr>
</table>
<hr><address><small>
<!-- hhmts start -->
Last modified: Thu Sep 5 06:06:41 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-33
View File
@@ -1,33 +0,0 @@
H1 { text-align: center; color: lightcoral; }
H2 { margin-top: 0; margin-bottom: 0; color: slateblue; }
.bold { font-weight: bold; }
.el { text-decoration: none; font-weight: bold; color: lightslateblue }
.func { text-decoration: none; font-weight: bold; color: lightslateblue }
/* table stuff */
.row_title {font-weight: bold; background-color: #6699CC; text-align: left;}
.content {background-color: #B0E2FF; text-align: left;}
.centered {text-align: center;}
.nowrap {white-space: nowrap;}
A.qindex { color: seagreen }
A.qindexRef {}
A.el { text-decoration: none; font-weight: bold; color: lightslateblue }
A.elRef { font-weight: bold; color: red}
A.code { text-decoration: none; font-weight: normal; color: darkblue; }
A.codeRef { font-weight: normal; }
DL.el { margin-left: -1cm }
DIV.fragment { width: 100%; border: none; background-color: #eeeeee; }
DIV.ah { background-color: black; margin-bottom: 3; margin-top: 3 }
/*TD.md { background-color: #f2f2ff }*/
/* md == member documentation */
TD.md { background-color: lightblue; }
DIV.groupHeader { margin-left: 16; margin-top: 12; margin-bottom: 6; font-weight: bold }
DIV.groupText { margin-left: 16; font-style: italic; font-size: smaller }
FONT.keyword { color: green }
FONT.keywordtype { color: green }
FONT.keywordflow { color: darkviolet }
FONT.comment { color: slateblue }
FONT.preprocessor { color: #806020 }
FONT.stringliteral { color: #002080 }
FONT.charliteral { color: #008080 }
-73
View File
@@ -1,73 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Example Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.17 -->
<hr><h1>dates_as_strings.cpp</h1> Various parsing and output of strings.
<p>
<div class="fragment"><pre><font class="comment">/*</font>
<font class="comment">The following is a simple example that shows conversion of dates to and </font>
<font class="comment">from a std::string.</font>
<font class="comment"></font>
<font class="comment">Expected output:</font>
<font class="comment">2001-Oct-09</font>
<font class="comment">2001-10-09</font>
<font class="comment">Tuesday October 9, 2001</font>
<font class="comment">An expected exception is next: </font>
<font class="comment"> Exception: Month number is out of range 1..12</font>
<font class="comment"></font>
<font class="comment">*/</font>
<font class="preprocessor">#include "boost/date_time/gregorian/gregorian.hpp"</font>
<font class="preprocessor">#include "boost/date_time/date_parsing.hpp"</font>
<font class="preprocessor">#include &lt;iostream&gt;</font>
<font class="preprocessor">#include &lt;string&gt;</font>
<font class="keywordtype">int</font>
main()
{
<font class="keyword">using</font> <font class="keyword">namespace </font>boost::gregorian;
try {
<font class="comment">// The following date is in ISO 8601 extended format (CCYY-MM-DD)</font>
std::string s(<font class="stringliteral">"2001-10-9"</font>); <font class="comment">//2001-October-05</font>
date d(from_string(s));
std::cout &lt;&lt; to_simple_string(d) &lt;&lt; std::endl;
<font class="comment">//Read ISO Standard(CCYYMMDD) and output ISO Extended</font>
std::string ud(<font class="stringliteral">"20011009"</font>); <font class="comment">//2001-Oct-09</font>
date d1(from_undelimited_string(ud));
std::cout &lt;&lt; to_iso_extended_string(d1) &lt;&lt; std::endl;
<font class="comment">//Output the parts of the date - Tuesday October 9, 2001</font>
date::ymd_type ymd = d1.year_month_day();
greg_weekday wd = d1.day_of_week();
std::cout &lt;&lt; wd.as_long_string() &lt;&lt; <font class="stringliteral">" "</font>
&lt;&lt; ymd.month.as_long_string() &lt;&lt; <font class="stringliteral">" "</font>
&lt;&lt; ymd.day &lt;&lt; <font class="stringliteral">", "</font> &lt;&lt; ymd.year
&lt;&lt; std::endl;
<font class="comment">//Let's send in month 25 by accident and create an exception</font>
std::string bad_date(<font class="stringliteral">"20012509"</font>); <font class="comment">//2001-??-09</font>
std::cout &lt;&lt; <font class="stringliteral">"An expected exception is next: "</font> &lt;&lt; std::endl;
date wont_construct(from_undelimited_string(bad_date));
<font class="comment">//use wont_construct so compiler doesn't complain, but you wont get here!</font>
std::cout &lt;&lt; <font class="stringliteral">"oh oh, you should reach this line: "</font>
&lt;&lt; to_iso_string(wont_construct) &lt;&lt; std::endl;
}
<font class="keywordflow">catch</font>(std::exception&amp; e) {
std::cout &lt;&lt; <font class="stringliteral">" Exception: "</font> &lt;&lt; e.what() &lt;&lt; std::endl;
}
<font class="keywordflow">return</font> 0;
}
</pre></div><hr><address><small>
Generated Wed Aug 21 16:54:33 2002 by Doxygen for CrystalClear Software&nbsp;&copy 2000-2002</small></address>
</body>
</html>
-48
View File
@@ -1,48 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Example Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.17 -->
<hr><h1>days_alive.cpp</h1> Calculate the number of days you have been living using durations and dates.
<p>
<div class="fragment"><pre>
<font class="preprocessor">#include "boost/date_time/gregorian/gregorian.hpp"</font>
<font class="preprocessor">#include "boost/date_time/date_parsing.hpp"</font>
<font class="preprocessor">#include &lt;iostream&gt;</font>
<font class="keywordtype">int</font>
main()
{
<font class="keyword">using</font> <font class="keyword">namespace </font>boost::gregorian;
std::string s;
std::cout &lt;&lt; "Enter birth day YYYY-MM-DD (eg: 2002-02-01): ";
std::cin &gt;&gt; s;
try {
date birthday(boost::date_time::parse_date&lt;date&gt;(s));
<font class="comment">//date birthday(2002,Jan,1);</font>
date today = day_clock::local_day();
date_duration days_alive = today - birthday;
date_duration one_day(1);
<font class="keywordflow">if</font> (days_alive == one_day) {
std::cout &lt;&lt; <font class="stringliteral">"Born yesterday, very funny"</font> &lt;&lt; std::endl;
}
<font class="keywordflow">else</font> <font class="keywordflow">if</font> (days_alive &lt; date_duration(0)) {
std::cout &lt;&lt; <font class="stringliteral">"Not born yet, hmm: "</font> &lt;&lt; days_alive.days()
&lt;&lt; <font class="stringliteral">" days"</font> &lt;&lt;std::endl;
}
<font class="keywordflow">else</font> {
std::cout &lt;&lt; <font class="stringliteral">"Days alive: "</font> &lt;&lt; days_alive.days() &lt;&lt; std::endl;
}
}
<font class="keywordflow">catch</font>(...) {
std::cout &lt;&lt; <font class="stringliteral">"Bad date entered: "</font> &lt;&lt; s &lt;&lt; std::endl;
}
<font class="keywordflow">return</font> 0;
};
</pre></div><hr><address><small>
Generated Wed Aug 21 16:54:33 2002 by Doxygen for CrystalClear Software&nbsp;&copy 2000-2002</small></address>
</body>
</html>
-30
View File
@@ -1,30 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Example Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.17 -->
<hr><h1>days_till_new_year.cpp</h1> Calculate the number of days till new years
<p>
<div class="fragment"><pre><font class="comment">// This example displays the amount of time until new year's in days</font>
<font class="preprocessor">#include "boost/date_time/gregorian/gregorian.hpp"</font>
<font class="preprocessor">#include &lt;iostream&gt;</font>
<font class="keywordtype">int</font>
main()
{
<font class="keyword">using</font> <font class="keyword">namespace </font>boost::gregorian;
date::ymd_type today = day_clock::local_day_ymd();
date new_years_day(today.year + 1,1,1);
date_duration dd = new_years_day - date(today);
std::cout &lt;&lt; "Days till new year: " &lt;&lt; dd.days() &lt;&lt; std::endl;
return 0;
};
</pre></div><hr><address><small>
Generated Wed Aug 21 16:54:33 2002 by Doxygen for CrystalClear Software&nbsp;&copy 2000-2002</small></address>
</body>
</html>
-96
View File
@@ -1,96 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Example Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.17 -->
<hr><h1>local_utc_conversion.cpp</h1> Demonstrate utc to local and local to utc calculations including dst.
<p>
<div class="fragment"><pre><font class="comment">//Demonstrate conversions between a local time and utc</font>
<font class="comment">/* Output:</font>
<font class="comment"></font>
<font class="comment">UTC &lt;--&gt; New York while DST is NOT active (5 hours)</font>
<font class="comment">2001-Dec-31 19:00:00 in New York is 2002-Jan-01 00:00:00 UTC time </font>
<font class="comment">2002-Jan-01 00:00:00 UTC is 2001-Dec-31 19:00:00 New York time </font>
<font class="comment"></font>
<font class="comment">UTC &lt;--&gt; New York while DST is active (4 hours)</font>
<font class="comment">2002-May-31 20:00:00 in New York is 2002-Jun-01 00:00:00 UTC time </font>
<font class="comment">2002-Jun-01 00:00:00 UTC is 2002-May-31 20:00:00 New York time </font>
<font class="comment"></font>
<font class="comment">UTC &lt;--&gt; Arizona (7 hours)</font>
<font class="comment">2002-May-31 17:00:00 in Arizona is 2002-Jun-01 00:00:00 UTC time </font>
<font class="comment"></font>
<font class="comment">*/</font>
<font class="preprocessor">#include "boost/date_time/posix_time/posix_time.hpp"</font>
<font class="preprocessor">#include "boost/date_time/local_time_adjustor.hpp"</font>
<font class="preprocessor">#include "boost/date_time/c_local_time_adjustor.hpp"</font>
<font class="preprocessor">#include &lt;iostream&gt;</font>
<font class="keywordtype">int</font>
main()
{
<font class="keyword">using</font> <font class="keyword">namespace </font>boost::posix_time;
using namespace boost::gregorian;
<font class="comment">//This local adjustor depends on the machine TZ settings-- highly dangerous!</font>
typedef boost::date_time::c_local_adjustor&lt;ptime&gt; local_adj;
ptime t10(date(2002,Jan,1), hours(7));
ptime t11 = local_adj::utc_to_local(t10);
std::cout &lt;&lt; "UTC &lt;--&gt; Zone base on TZ setting" &lt;&lt; std::endl;
std::cout &lt;&lt; to_simple_string(t11) &lt;&lt; " in your TZ is "
&lt;&lt; to_simple_string(t10) &lt;&lt; " UTC time "
&lt;&lt; std::endl;
time_duration td = t11 - t10;
std::cout &lt;&lt; "A difference of: "
&lt;&lt; to_simple_string(td) &lt;&lt; std::endl;
<font class="comment">//eastern timezone is utc-5</font>
typedef boost::date_time::local_adjustor&lt;ptime, -5, us_dst&gt; us_eastern;
ptime t1(date(2001,Dec,31), hours(19)); <font class="comment">//5 hours b/f midnight NY time</font>
std::cout &lt;&lt; "\nUTC &lt;--&gt; New York while DST is NOT active (5 hours)"
&lt;&lt; std::endl;
ptime t2 = us_eastern::local_to_utc(t1);
std::cout &lt;&lt; to_simple_string(t1) &lt;&lt; " in New York is "
&lt;&lt; to_simple_string(t2) &lt;&lt; " UTC time "
&lt;&lt; std::endl;
ptime t3 = us_eastern::utc_to_local(t2);<font class="comment">//back should be the same</font>
std::cout &lt;&lt; to_simple_string(t2) &lt;&lt; " UTC is "
&lt;&lt; to_simple_string(t3) &lt;&lt; " New York time "
&lt;&lt; "\n\n";
ptime t4(date(2002,May,31), hours(20)); <font class="comment">//4 hours b/f midnight NY time</font>
std::cout &lt;&lt; "UTC &lt;--&gt; New York while DST is active (4 hours)" &lt;&lt; std::endl;
ptime t5 = us_eastern::local_to_utc(t4);
std::cout &lt;&lt; to_simple_string(t4) &lt;&lt; " in New York is "
&lt;&lt; to_simple_string(t5) &lt;&lt; " UTC time "
&lt;&lt; std::endl;
ptime t6 = us_eastern::utc_to_local(t5);<font class="comment">//back should be the same</font>
std::cout &lt;&lt; to_simple_string(t5) &lt;&lt; " UTC is "
&lt;&lt; to_simple_string(t6) &lt;&lt; " New York time "
&lt;&lt; "\n" &lt;&lt; std::endl;
<font class="comment">//Arizona timezone is utc-7 with no dst</font>
typedef boost::date_time::local_adjustor&lt;ptime, -7, no_dst&gt; us_arizona;
ptime t7(date(2002,May,31), hours(17));
std::cout &lt;&lt; "UTC &lt;--&gt; Arizona (7 hours)" &lt;&lt; std::endl;
ptime t8 = us_arizona::local_to_utc(t7);
std::cout &lt;&lt; to_simple_string(t7) &lt;&lt; " in Arizona is "
&lt;&lt; to_simple_string(t8) &lt;&lt; " UTC time "
&lt;&lt; std::endl;
return 0;
}
</pre></div><hr><address><small>
Generated Wed Aug 21 16:54:33 2002 by Doxygen for CrystalClear Software&nbsp;&copy 2000-2002</small></address>
</body>
</html>
-90
View File
@@ -1,90 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Example Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.17 -->
<hr><h1>period_calc.cpp</h1> Calculates if a date is in an 'irregular' collection of periods using period calculation functions.
<p>
<div class="fragment"><pre><font class="comment">/*</font>
<font class="comment">This example demonstrates a simple use of periods for the calculation</font>
<font class="comment">of date information.</font>
<font class="comment"></font>
<font class="comment">The example calculates if a given date is a weekend or holiday</font>
<font class="comment">given an exclusion set. That is, each weekend or holiday is</font>
<font class="comment">entered into the set as a time interval. Then if a given date</font>
<font class="comment">is contained within any of the intervals it is considered to</font>
<font class="comment">be within the exclusion set and hence is a offtime.</font>
<font class="comment"></font>
<font class="comment">Output:</font>
<font class="comment">Number Excluded Periods: 5</font>
<font class="comment">20020202/20020203</font>
<font class="comment">20020209/20020210</font>
<font class="comment">20020212/20020212</font>
<font class="comment">20020216/20020217</font>
<font class="comment">In Exclusion Period: 20020216 --&gt; 20020216/20020217</font>
<font class="comment">20020223/20020224</font>
<font class="comment"></font>
<font class="comment">*/</font>
<font class="preprocessor">#include "boost/date_time/gregorian/gregorian.hpp"</font>
<font class="preprocessor">#include &lt;set&gt;</font>
<font class="preprocessor">#include &lt;algorithm&gt;</font>
<font class="preprocessor">#include &lt;iostream&gt;</font>
<font class="keyword">typedef</font> std::set&lt;boost::gregorian::date_period&gt; date_period_set;
<font class="comment">//Simple population of the exclusion set</font>
date_period_set
generateExclusion()
{
<font class="keyword">using</font> <font class="keyword">namespace </font>boost::gregorian;
date_period periods_array[] =
{ date_period(date(2002,Feb,2), date(2002,Feb,4)),<font class="comment">//weekend of 2nd-3rd</font>
date_period(date(2002,Feb,9), date(2002,Feb,11)),
date_period(date(2002,Feb,16), date(2002,Feb,18)),
date_period(date(2002,Feb,23), date(2002,Feb,25)),
date_period(date(2002,Feb,12), date(2002,Feb,13))<font class="comment">//a random holiday 2-12</font>
};
<font class="keyword">const</font> <font class="keywordtype">int</font> num_periods = <font class="keyword">sizeof</font>(periods_array)/<font class="keyword">sizeof</font>(date_period);
date_period_set ps;
<font class="comment">//insert the periods in the set</font>
std::insert_iterator&lt;date_period_set&gt; itr(ps, ps.begin());
std::copy(periods_array, periods_array+num_periods, itr );
<font class="keywordflow">return</font> ps;
}
<font class="keywordtype">int</font> main()
{
<font class="keyword">using</font> <font class="keyword">namespace </font>boost::gregorian;
date_period_set ps = generateExclusion();
std::cout &lt;&lt; "Number Excluded Periods: " &lt;&lt; ps.size() &lt;&lt; std::endl;
date d(2002,Feb,16);
date_period_set::const_iterator i = ps.begin();
<font class="comment">//print the periods, check for containment</font>
for (;i != ps.end(); i++) {
std::cout &lt;&lt; to_iso_string(*i) &lt;&lt; std::endl;
<font class="comment">//if date is in exclusion period then print it</font>
if (i-&gt;contains(d)) {
std::cout &lt;&lt; "In Exclusion Period: "
&lt;&lt; to_iso_string(d) &lt;&lt; " --&gt; " &lt;&lt; to_iso_string(*i)
&lt;&lt; std::endl;
}
}
return 0;
}
</pre></div><hr><address><small>
Generated Wed Aug 21 16:54:33 2002 by Doxygen for CrystalClear Software&nbsp;&copy 2000-2002</small></address>
</body>
</html>
-110
View File
@@ -1,110 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Example Documentation</title><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#ffffff"> <!-- Generated by Doxygen 1.2.17 -->
<hr>
<h1>print_holidays.cpp</h1>
This is an example of using functors to define a holiday schedule
<p></p>
<div class="fragment" id="DIV1"><pre><font class="comment">/*generate a set of dates using a collections of date generators</font>
<font class="comment">Output looks like:</font>
<font class="comment">Enter Year: 2002</font>
<font class="comment">2002-Jan-01 [Tue]</font>
<font class="comment">2002-Jan-21 [Mon]</font>
<font class="comment">2002-Feb-12 [Tue]</font>
<font class="comment">2002-Jul-04 [Thu]</font>
<font class="comment">2002-Sep-02 [Mon]</font>
<font class="comment">2002-Nov-28 [Thu]</font>
<font class="comment">2002-Dec-25 [Wed]</font>
<font class="comment">Number Holidays: 7</font>
<font class="comment">*/</font>
<font class="preprocessor">#include "boost/date_time/gregorian/gregorian.hpp"</font>
<font class="preprocessor">#include &lt;algorithm&gt;</font>
<font class="preprocessor">#include &lt;functional&gt;</font>
<font class="preprocessor">#include &lt;vector&gt;</font>
<font class="preprocessor">#include &lt;iostream&gt;</font>
<font class="preprocessor">#include &lt;set&gt;</font>
<font class="keywordtype">void</font>
print_date(boost::gregorian::date d)
{
std::cout &lt;&lt; d &lt;&lt; <font class="stringliteral">" ["</font> &lt;&lt; d.day_of_week() &lt;&lt; <font class="stringliteral">"]\n"</font>;
}
<font class="keywordtype">int</font>
main() {
std::cout &lt;&lt; <font class="stringliteral">"Enter Year: "</font>;
<font class="keywordtype">int</font> year;
std::cin &gt;&gt; year;
<font class="keyword">using</font> <font class="keyword">namespace </font>boost::gregorian;
<font class="comment">//define a collection of holidays fixed by month and day</font>
std::vector&lt;partial_date&gt; holidays;
holidays.push_back(partial_date(1, Jan)); <font class="comment">//Western New Year</font>
holidays.push_back(partial_date(4, Jul)); <font class="comment">//US Independence Day</font>
holidays.push_back(partial_date(25, Dec));<font class="comment">//Christmas day</font>
<font class="comment">//define a shorthand for the nkday function object</font>
typedef boost::date_time::nth_kday_of_month&lt;date&gt; nkday;
<font class="comment">//define a collection of nth kday holidays</font>
std::vector&lt;nkday&gt; more_holidays;
more_holidays.push_back(nkday(nkday::first, Monday, Sep)); <font class="comment">//US labor day</font>
more_holidays.push_back(nkday(nkday::third, Monday, Jan)); <font class="comment">//MLK Day</font>
more_holidays.push_back(nkday(nkday::second, Tuesday, Feb)); <font class="comment">//Pres day</font>
more_holidays.push_back(nkday(nkday::fourth, Thursday, Nov)); <font class="comment">//Thanksgiving</font>
typedef std::set&lt;date&gt; date_set;
date_set all_holidays;
#if (defined(BOOST_MSVC) &amp;&amp; (_MSC_VER &lt;= 1200)) <font class="comment">// 1200 == VC++ 6.0</font>
std::cout &lt;&lt; "Sorry, this example temporarily disabled on VC 6.\n"
&lt;&lt; "The std::transform isn't accepted by the compiler\n"
&lt;&lt; "So if you hack up the example without std::transform\n"
&lt;&lt; "it should work\n"
&lt;&lt; std::endl;
#else
<font class="comment">//generate a set of concrete dates from the 'partial_date' holidays</font>
<font class="comment">//by calling the get_date functions</font>
std::transform(holidays.begin(), holidays.end(),
std::insert_iterator&lt;date_set&gt;(all_holidays, all_holidays.begin()),
std::bind2nd(std::mem_fun_ref(&amp;partial_date::get_date),
year));
<font class="comment">//Now add in the 'floating' holidays </font>
std::transform(more_holidays.begin(), more_holidays.end(),
std::insert_iterator&lt;date_set&gt;(all_holidays, all_holidays.begin()),
std::bind2nd(std::mem_fun_ref(&amp;nkday::get_date),
year));
<font class="comment">//print the holidays to the screen</font>
std::for_each(all_holidays.begin(), all_holidays.end(), print_date);
std::cout &lt;&lt; "Number Holidays: " &lt;&lt; all_holidays.size() &lt;&lt; std::endl;
#endif
return 0;
}
</pre>
</div>
<hr>
<address><small> Generated Wed Aug 21 16:54:33 2002 by Doxygen for CrystalClear
Software © 2000-2002</small></address>
</body>
</html>
-59
View File
@@ -1,59 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Example Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.17 -->
<hr><h1>print_hours.cpp</h1> Demonstrate time iteration, clock retrieval, and simple calculation.
<p>
<div class="fragment"><pre><font class="comment">//Print the remaining hours of the day</font>
<font class="comment">//Uses the clock to get the local time </font>
<font class="comment">//Use an iterator to iterate over the remaining hours</font>
<font class="comment">//Retrieve the date part from a time</font>
<font class="comment">/* Expected Output something like:</font>
<font class="comment"></font>
<font class="comment">2002-Mar-08 16:30:59</font>
<font class="comment">2002-Mar-08 17:30:59</font>
<font class="comment">2002-Mar-08 18:30:59</font>
<font class="comment">2002-Mar-08 19:30:59</font>
<font class="comment">2002-Mar-08 20:30:59</font>
<font class="comment">2002-Mar-08 21:30:59</font>
<font class="comment">2002-Mar-08 22:30:59</font>
<font class="comment">2002-Mar-08 23:30:59</font>
<font class="comment">Time left till midnight: 07:29:01</font>
<font class="comment"></font>
<font class="comment">*/</font>
<font class="preprocessor">#include "boost/date_time/posix_time/posix_time.hpp"</font>
<font class="preprocessor">#include &lt;iostream&gt;</font>
<font class="keywordtype">int</font>
main()
{
<font class="keyword">using</font> <font class="keyword">namespace </font>boost::posix_time;
using namespace boost::gregorian;
<font class="comment">//get the current time from the clock -- one second resolution</font>
ptime now = second_clock::local_time();
<font class="comment">//Get the date part out of the time</font>
date today = now.date();
date tommorrow = today + date_duration(1);
ptime tommorrow_start(tommorrow); <font class="comment">//midnight </font>
<font class="comment">//iterator adds by one hour</font>
time_iterator titr(now,hours(1));
for (; titr &lt; tommorrow_start; ++titr) {
std::cout &lt;&lt; to_simple_string(*titr) &lt;&lt; std::endl;
}
time_duration remaining = tommorrow_start - now;
std::cout &lt;&lt; "Time left till midnight: "
&lt;&lt; to_simple_string(remaining) &lt;&lt; std::endl;
return 0;
}
</pre></div><hr><address><small>
Generated Thu Sep 5 05:52:10 2002 by Doxygen for CrystalClear Software&nbsp;&copy 2000-2002</small></address>
</body>
</html>
-70
View File
@@ -1,70 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Example Documentation</title><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#ffffff"> <!-- Generated by Doxygen 1.2.17 -->
<hr>
<h1>print_month.cpp</h1>
Simple utility to print out days of the month with the days of a month.
Demontstrates date iteration (date_time::date_itr).
<p></p>
<div class="fragment" id="DIV1"><pre><font class="comment">/*</font>
<font class="comment">This example prints all the dates in a month. It demonstrates</font>
<font class="comment">the use of iterators as well as functions of the gregorian_calendar</font>
<font class="comment"></font>
<font class="comment">Output:</font>
<font class="comment">Enter Year: 2002</font>
<font class="comment">Enter Month(1..12): 2</font>
<font class="comment">2002-Feb-01 [Fri]</font>
<font class="comment">2002-Feb-02 [Sat]</font>
<font class="comment">2002-Feb-03 [Sun]</font>
<font class="comment">2002-Feb-04 [Mon]</font>
<font class="comment">2002-Feb-05 [Tue]</font>
<font class="comment">2002-Feb-06 [Wed]</font>
<font class="comment">2002-Feb-07 [Thu]</font>
<font class="comment">*/</font>
<font class="preprocessor">#include "boost/date_time/gregorian/gregorian.hpp"</font>
<font class="preprocessor">#include &lt;iostream&gt;</font>
<font class="keywordtype">int</font>
main()
{
std::cout &lt;&lt; <font class="stringliteral">"Enter Year: "</font>;
<font class="keywordtype">int</font> year, month;
std::cin &gt;&gt; year;
std::cout &lt;&lt; <font class="stringliteral">"Enter Month(1..12): "</font>;
std::cin &gt;&gt; month;
<font class="keyword">using</font> <font class="keyword">namespace </font>boost::gregorian;
try {
<font class="comment">//Use the calendar to get the last day of the month</font>
<font class="keywordtype">int</font> eom_day = gregorian_calendar::end_of_month_day(year,month);
date endOfMonth(year,month,eom_day);
<font class="comment">//construct an iterator starting with first day of the month</font>
day_iterator ditr(date(year,month,1));
<font class="comment">//loop thru the days and print each one</font>
<font class="keywordflow">for</font> (; ditr &lt;= endOfMonth; ++ditr) {
std::cout &lt;&lt; *ditr &lt;&lt; <font class="stringliteral">" ["</font>
&lt;&lt; ditr-&gt;day_of_week() &lt;&lt; <font class="stringliteral">"]"</font>
&lt;&lt; std::endl;
}
}
<font class="keywordflow">catch</font>(std::exception&amp; e) {
std::cout &lt;&lt; <font class="stringliteral">"Error bad date, check your entry: \n"</font>
&lt;&lt; <font class="stringliteral">" Details: "</font> &lt;&lt; e.what() &lt;&lt; std::endl;
}
<font class="keywordflow">return</font> 0;
}
</pre>
</div>
<hr>
<address><small> Generated Wed Aug 21 16:54:33 2002 by Doxygen for CrystalClear
Software © 2000-2002</small></address>
</body>
</html>
-40
View File
@@ -1,40 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Example Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.17 -->
<hr><h1>time_math.cpp</h1> Various types of calculations with times and time durations.
<p>
<div class="fragment"><pre><font class="comment">//Some simple examples of constructing and calculating with times</font>
<font class="comment">//Output:</font>
<font class="comment">//2002-Feb-01 00:00:00 - 2002-Feb-01 05:04:02.001000000 = -5:04:02.001000000</font>
<font class="preprocessor">#include "boost/date_time/posix_time/posix_time.hpp"</font>
<font class="preprocessor">#include &lt;iostream&gt;</font>
<font class="keywordtype">int</font>
main()
{
<font class="keyword">using</font> <font class="keyword">namespace </font>boost::posix_time;
using namespace boost::gregorian;
date d(2002,Feb,1); <font class="comment">//an arbitrary date</font>
<font class="comment">//construct a time by adding up some durations durations</font>
ptime t1(d, hours(5)+minutes(4)+seconds(2)+millisec(1));
<font class="comment">//construct a new time by subtracting some times</font>
ptime t2 = t1 - hours(5)- minutes(4)- seconds(2)- millisec(1);
<font class="comment">//construct a duration by taking the difference between times</font>
time_duration td = t2 - t1;
std::cout &lt;&lt; to_simple_string(t2) &lt;&lt; " - "
&lt;&lt; to_simple_string(t1) &lt;&lt; " = "
&lt;&lt; to_simple_string(td) &lt;&lt; std::endl;
return 0;
}
</pre></div><hr><address><small>
Generated Wed Aug 21 16:54:33 2002 by Doxygen for CrystalClear Software&nbsp;&copy 2000-2002</small></address>
</body>
</html>
-62
View File
@@ -1,62 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Example Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.17 -->
<hr><h1>time_periods.cpp</h1> Demonstrate some simple uses of time periods.
<p>
<div class="fragment"><pre><font class="comment">//Some simple examples of constructing and calculating with times</font>
<font class="comment">//Returns:</font>
<font class="comment">//[2002-Feb-01 00:00:00/2002-Feb-01 23:59:59.999999999] contains 2002-Feb-01 03:00:05</font>
<font class="comment">//[2002-Feb-01 00:00:00/2002-Feb-01 23:59:59.999999999] intersected with</font>
<font class="comment">//[2002-Feb-01 00:00:00/2002-Feb-01 03:00:04.999999999] is </font>
<font class="comment">//[2002-Feb-01 00:00:00/2002-Feb-01 03:00:04.999999999]</font>
<font class="preprocessor">#include "boost/date_time/posix_time/posix_time.hpp"</font>
<font class="preprocessor">#include &lt;iostream&gt;</font>
<font class="keyword">using</font> <font class="keyword">namespace </font>boost::posix_time;
using namespace boost::gregorian;
<font class="comment">//Create a simple period class to contain all the times in a day</font>
class day_period : <font class="keyword">public</font> time_period
{
<font class="keyword">public</font>:
day_period(date d) : time_period(ptime(d),<font class="comment">//midnight</font>
ptime(d,hours(24)))
{}
};
<font class="keywordtype">int</font>
main()
{
date d(2002,Feb,1); <font class="comment">//an arbitrary date</font>
<font class="comment">//a period that represents a day </font>
day_period dp(d);
ptime t(d, hours(3)+seconds(5)); <font class="comment">//an arbitray time on that day</font>
<font class="keywordflow">if</font> (dp.contains(t)) {
std::cout &lt;&lt; to_simple_string(dp) &lt;&lt; <font class="stringliteral">" contains "</font>
&lt;&lt; to_simple_string(t) &lt;&lt; std::endl;
}
<font class="comment">//a period that represents part of the day</font>
time_period part_of_day(ptime(d, hours(0)), t);
<font class="comment">//intersect the 2 periods and print the results</font>
<font class="keywordflow">if</font> (part_of_day.intersects(dp)) {
time_period result = part_of_day.intersection(dp);
std::cout &lt;&lt; to_simple_string(dp) &lt;&lt; <font class="stringliteral">" intersected with\n"</font>
&lt;&lt; to_simple_string(part_of_day) &lt;&lt; <font class="stringliteral">" is \n"</font>
&lt;&lt; to_simple_string(result) &lt;&lt; std::endl;
}
<font class="keywordflow">return</font> 0;
}
</pre></div><hr><address><small>
Generated Thu Sep 5 05:52:10 2002 by Doxygen for CrystalClear Software&nbsp;&copy 2000-2002</small></address>
</body>
</html>
-90
View File
@@ -1,90 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Gregorian Date System Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<p>
<h1>Gregorian Date System Documentation</h1>
<p>&nbsp;<p>
<hr>
<p>
<p>
<a href="index.html">Overall Index</a>
<p>
<a href="#intro">Introduction</a> --
<a href="#usage">Usage Examples</a><p>
<font class="bold">Temporal Types</font>
<p>
<a href="class_date.html">Class date</a> --
<a href="class_date_duration.html">Class date_duration</a> --
<a href="class_date_period.html">Class date_period</a>
<p>
<font class="bold">Other Topics</font>
<p>
<a href="date_iterators.html">Date Iterators</a> --
<a href="date_algorithms.html">Date Generators / Algorithms</a> --
<a href="class_gregorian_calendar.html">Class gregorian_calendar</a> --
<a href="class_date.html#constructfromclock">Class day_clock</a>
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
The gregorian date system provides a date programming system based the
Gregorian Calendar. The first introduction of the Gregorian calendar was
in 1582 to fix an error in the Julian Calendar. However, many local
jurisdications did not adopt this change until much later. Thus there
is potential confusion with historical dates.
<p>
The implemented calendar is a "propleptic Gregorian calendar" which extends
dates back prior to the Gregorian Calendar's first adoption in in 1582.
The current implementation supports dates in the range
1400-Jan-01 to 10000-Jan-01. Many references will represent dates
prior to 1582 using the Julian Calendar, so caution is in order if
accurate calculations are required on historic
dates.
See <A href="http://emr.cs.iit.edu/home/reingold/calendar-book/second-edition/">Calendrical Calculations</A> by Reingold &amp; Dershowitz for more details.
Date information from Calendrical Calculations has been used to cross-test
the correctness of the Gregorian calendar implementation.
<p>
All types for the gregorian system are found in namespace boost::gregorian.
The library supports a convience header <font class="el">boost/date_time/gregorian/gregorian_types.hpp</font> that will include all the classes of the
library with no input/output dependency.
Another header <font class="el">boost/date_time/gregorian/gregorian.hpp</font> will include the types and the input/output code.
<p>
The class <a href="class_date.html">boost::gregorian::date</a> is the primary
temporal type for users. If you are interested in learning about writing
programs do specialized date calculations such as finding the
"first sunday in april" see the
<a href="date_algorithms.html">date generators and algorithms page</a>.
<p>
<h2><a name="usage">Usage Examples</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3><tr><td><b>Example</b></td><td><b>Description</b> </td></tr>
<tr><td><a href="exp-days_alive.html">Days Alive</a> <a href="exp-days_till_new_year.html">Days Till New Year</a></td><td>Simple date arithmetic. Retrieve current day from clock. </td></tr>
<tr><td><a href="exp-dates_as_strings.html">Dates as strings</a></td><td>Simple parsing and formmatting of dates from/to strings </td></tr>
<tr><td><a href="exp-period_calc.html">Date Period Calculations</a></td><td>See if a date is in a set of date periods (eg: is it a holiday/weekend) </td></tr>
<tr><td><a href="exp-print_month.html">Print a month</a></td><td>Small utility program which prints out all the days in a month from command line. Need to know if 1999-Jan-1 was a Friday or a Saturday? This program shows how to do it. </td></tr>
<tr><td><a href="exp-print_holidays.html">Print Holidays</a></td><td>Uses date generators to convert abstract specification into concrete set of dates. </td></table>
<p>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Sun Feb 9 06:52:31 MST 2003
<!-- hhmts end -->
by Jeff Garland &copy 2000-2002
</small></address>
</body>
</html>
+9 -219
View File
@@ -1,223 +1,13 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Boost Date-Time Library Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<html>
<head>
<meta http-equiv="refresh" content="0; URL=../../../doc/html/date_time.html">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>Boost Date-Time Library Documentation</h1>
<p>
<h3 align="center">Version 1.01</h3>
<hr>
<h2><a name="contents">Contents</a></h2>
<p>
<font class="bold">Overview</font><br><br>
<p>
<a href="#intro">Introduction</a> --
<a href="#motivation">Motivation</a> --
<a href="#usage">Usage Examples</a> --
<a href="#domain">Domain Concepts</a> --
<a href="#design">Design and Extensions</a> --
<a href="#acknowledge">Acknowledgements</a> --
<a href="#more">More Info</a>
<p>
<a href="BuildInfo.html">Build-Compiler Information</a> --
<a href="Changes.html">Change History</a> --
<a href="#test">Tests</a> --
<a href="license.html">License</a> --
<a href="BasicTerms.html">Basic Terminology Reference</a> --
<a href="References.html">References</a>
<p>
<font class="bold">Date Programming</font><br><br>
<a href="gregorian.html">Gregorian Date System</a><br>
<ul>
<li><a href="class_date.html">Class date</a>
<li><a href="class_date_duration.html">Class date_duration</a>
<li><a href="class_date_period.html">Class date_period</a>
<li><a href="date_iterators.html">Date Iterators</a>
<li><a href="date_algorithms.html">Date Generators / Algorithms</a>
<li><a href="class_gregorian_calendar.html">Class gregorian_calendar</a>
<li><a href="class_date.html#constructfromclock">Class day_clock</a>
</ul>
<p>
<font class="bold">Time Programming</font><br><br>
<a href="posix_time.html">Posix Time System</a><br>
<ul>
<li><a href="class_ptime.html">Class ptime</a>
<li><a href="class_time_duration.html">Class time_duration</a>
<li><a href="class_time_period.html">Class time_period</a>
<li><a href="time_iterators.html">Time Iterators</a>
<li><a href="local_time_adjust.html">UTC / Local Time Adjustments</a>
</ul>
<h2><a name="intro">Introduction</a></h2>
<p>
A set of date-time libraries based on generic programming concepts.
<p>
<h2><a name="motivation">Motivation</a></h2>
<p>
The motivation for this library comes from working with and helping build several date-time libraries on several projects. Date-time libraries provide fundamental infrastructure for most development projects. However, most of them have limitations in their ability to calculate, format, convert, or perform some other functionality. For example, most libraries do not correctly handle leap seconds, provide concepts such as infinity, or provide the ability to use high resolution or network time sources. These libraries also tend to be rigid in their representation of dates and times. Thus customized policies for a project or subproject are not possible.
<p>
Programming with dates and times should be almost as simple and natural as programming with strings and integers. Applications with lots of temporal logic can be radically simplified by having a robust set of operators and calculation capabilities. Classes should provide the ability to compare dates and times, add lengths or time durations, retrieve dates and times from clocks, and work naturally with date and time intervals.
<p>
<h2><a name="usage">Usage Examples</a></h2>
<p>
The following shows examples of the sorts of code that can be written using the gregorian date system. See <a href="gregorian.html">Date Programming</a> for more details.
<p>
<div class="fragment"><pre> <font class="keyword">using</font> <font class="keyword">namespace </font>boost::gregorian;
date weekstart(2002,Feb,1);
date weekend (2002,Feb,7);
date_duration fiveDays(5);
date d3 = d1 + fiveDays;
date today = day_clock::local_day();
<font class="keywordflow">if</font> (d3 &gt;= today) {} <font class="comment">//date comparison operators</font>
date_period thisWeek(d1,d2);
<font class="keywordflow">if</font> (thisWeek.contains(today)) {}<font class="comment">//do something</font>
<font class="comment">//iterate and print the week</font>
day_iterator itr(weekstart);
<font class="keywordflow">for</font> (; itr &lt;= weekend; ++itr) {
std::cout &lt;&lt; to_iso_extended_string(*itr) &lt;&lt; std::endl;
} </pre></div>
And some time examples using the posix_time system. See <a href="posix_time.html">Time Programming</a> for more details.
<div class="fragment"><pre> <font class="keyword">using</font> <font class="keyword">namespace </font>boost::posix_time;
date d(2002,Feb,1); <font class="comment">//an arbitrary date</font>
ptime t1(d, hours(5)+nanosec(100));<font class="comment">//date + time of day offset</font>
ptime t2 = t1 - minutes(4)+seconds(2);
ptime now = second_clock::local_time(); <font class="comment">//use the clock</font>
<font class="comment">//Get the date part out of the time</font>
date today = now.date();
date tommorrow = today + date_duration(1);
ptime tommorrow_start(tommorrow); <font class="comment">//midnight </font>
<font class="comment">//starting at current time iterator adds by one hour</font>
time_iterator titr(now,hours(1));
<font class="keywordflow">for</font> (; titr &lt; tommorrow_start; ++titr) {
std::cout &lt;&lt; to_simple_string(*titr) &lt;&lt; std::endl;
}</pre></div>
<p>
<p>
<h2><a name="domain">Domain Concepts</a></h2>
<p>
The date time domain is rich in terminology and problems. The following is a brief introduction to the concepts you will find reflected in the library.
<p>
The library supports 3 basic temporal types:
<UL>
<li> <font class="bold">Time Point</font> -- Specifier for a location in the time continuum.
<li> <font class="bold">Time Duration</font> -- A length of time unattached to any point on the time continuum.
<li> <font class="bold">Time Interval</font> -- A duration of time attached to a specific point in the time continuum. Also known as a time period.
</UL>
Each of these temporal types has a <font class="bold">Resolution</font> which is defined by the smallest representable duration. A <font class="bold">Time system</font> provides all these categories of temporal types as well as the rules for labeling and calculating with time points. <font class="bold">Calendar Systems</font> are simply time systems with a maximum resolution of one day. The <font class="bold">Gregorian</font> system is the most widely used calendar system today (the ISO system is basically a derivative of this). However, there are many other calendar systems as well. <font class="bold">UTC (Coordinated Universal Time)</font> is a widely used civil time system. UTC is adjusted for earth rotation at longitude 0 by the use of leap seconds (This is not predictable, only as necessary). Most <font class="bold">local time</font> systems are based on UTC but are also adjusted for earth rotation so that daylight hours are similar everywhere. In addition, some local times include <font class="bold">daylight savings time (DST)</font> adjustments to shift the daylight hours during the summer.
<p>
A <font class="bold">Clock Device</font> is software component (tied to some hardware) that provides the current date or time with respect to a time system. A clock can measure the current time to a known resolution which may be higher or lower than a particular time representation.
<p>
The library provides support for calculating with dates and times. However, time calculations are not quite the same as calculating with integers. If you are serious about the accuracy of your time calculations need to read about <a href="Tradeoffs.html">Stability, Predictability, and Approximations</a>.
<p>
Additional reference materials can be found in the following:
<ul>
<li><a href="BasicTerms.html">Basic Terminology</a>
<li><a href="Calculations.html">Calculations</a>
<li><a href="Tradeoffs.html">Stability, Predictability, and Approximations</a>
<li><a href="References.html">References</a>
</ul>
<p>
<p>
<h2><a name="test">Tests</a></h2>
<p>
The library provides a large number of tests in the
<pre>
libs/date_time/test
libs/date_time/test/gregorian
libs/date_time/test/posix_time
</pre>
<p>
directories. Building and executing these tests assures that the installation is correct and that the library is functioning correctly. In addition, these tests facilitate the porting to new compilers. Finally, the tests provide examples of many functions not explicitly described in the usage examples.
<p>
<h2><a name="design">Design and Extensions</a></h2>
<p>
A large part of the genesis of this library has been the observation that
few date-time libraries are built in a fashion that allows customization
and extension. A typical example, the calendar logic is built directly
into the date class. Or the clock retrieval functions are built directly
into the time class. These design decisions usually make it impossible to
extend or change the library behavior. At a more fundamental level,
there are usually assumptions about the resolution of time representation
or the gregorian calendar.
<p>
Often times, the result is that a project must settle for a less
than complete library because of a requirement for high resolution
time representation or other assumptions that do not match the
implementation of the library. This is extremely unfortunate because
development of a library of this sort is far from a trivial task.
<p>
While the design is far from perfect the current design is far
more flexible than any date-time library the author is aware of. It
is expected that the various aspects of extensibility will be better
documented in future versions. Information about the design goals
of the library is <a href="DesignGoals.html">summarized here.</a>
<p>
<h2><a name="acknowledge">Acknowledgements</a></h2>
<p>
Many people have contributed to the development of this library.
In particular Hugo Duncan and Joel de Guzman for help with porting to
various compilers. For initial development of concepts and
design Corwin Joy and Michael Kenniston deserve special thanks.
Also extra thanks to Michael for writing up the theory and tradeoffs
part of the documentation. Dave Zumbro for initial inspiration
and sage thoughts. Many thanks
to boost reviewers and users including:
William Seymour, Kjell Elster, Beman Dawes, Gary Powell,
Andrew Maclean, William Kempf, Peter Dimov, Chris Little,
David Moore, Darin Adler, Gennadiy Rozental, Joachim Achtzehnter,
Paul Bristow, Jan Langer, Mark Rodgers, Glen Knowles, Matthew Denman,
and George Heintzelman.
<p>
<h2><a name="more">More Info</a></h2>
<p>
The design of the library is currently being evolved using Wiki and email discussions. You can find more information at:
<p>
<ul>
<li><a href="http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?GDTL">Boost Wiki GDTL Start Page</a>
<li><a href="http://www.crystalclearsoftware.com/libraries/gdtl/gdtl_ref_guide/index.html">Full Doxygen Reference Manual</a></ul>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Sun Jan 19 15:49:46 MST 2003
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
Automatic redirection failed, please go to
<a href="../../../doc/html/date_time.html">../../../doc/html/date_time.html</a>
<p>© Copyright CrystalClear Software, Inc 2003-2006</p>
<p> Use, modification, and distribution are subject to the Boost Software
License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
www.boost.org/LICENSE_1_0.txt</a>)</p>
</body>
</html>
-43
View File
@@ -1,43 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Boost Date-Time Library Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>Boost Date-Time Library License</h1>
<p>
<hr>
<p>
<p>
The following is the overall license for the boost date_time
library. This notice is found in all source files related to
the library.
<p>
Copyright &copy; 2002 CrystalClear Software, Inc.<br>
<br>
Permission to use, copy, modify, distribute and sell this software
and its documentation for any purpose is hereby granted without fee,
provided that the above copyright notice appear in all copies and
that both that copyright notice and this permission notice appear
in supporting documentation. CrystalClear Software makes no
representations about the suitability of this software for any
purpose. It is provided "as is" without express or implied warranty.
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Sun Oct 13 10:32:24 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-92
View File
@@ -1,92 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>posix_time::local time adjust Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>Local Time Adjustment</h1>
<p>&nbsp;<p>
<hr>
<p>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<font class="bold">Local Time Adjustment</font>
<p>
<a href="#header">Header</a> --
<a href="#classoverview">Class Overview</a> --
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
A frequent problem in time representation is the conversion between
various local time systems. In general this is accomplished by
using a reference time system. The reference time system is typically
UTC.
<p>
Since the posix_time system does no internal time adjustment it
can be used to represent both local times and UTC times. However,
the user is currently left to handle conversions and time zone
knowledge explicitly.
<p>
The library offers two different ways to perform UTC to local conversions.
The first is using the time zone settings of the computer. This is
a useful solution for converting a UTC time for a user machine. This
approach depends on the ctime API and will provide incorrect results
if the environment is set incorrectly.
The other approach allows conversion from any zone to UTC and back
independent of the settings of the time zone settings of the
computer. The <a href="exp-local_utc_conversion.html">local utc conversion example</a>
demonstrates both of these techniques.
<p>
<h2><a name="header">Header</a></h2>
<pre>
#include "boost/date_time/gregorian/gregorian.hpp" //include all types plus i/o
or
#include "boost/date_time/gregorian/gregorian_types.hpp" //no i/o just types
</pre>
<p>
<h2><a name="classoverview">Class Overview</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Class</b></td>
<td><b>Description</b></td>
<td><b>Example</b></td></tr>
<tr><td>date_time::c_local_adjustor&lt;ptime&gt;::<font class="el">utc_to_local</font>(ptime)</td>
<td>Calculate local machine time from a UTC time based on time zone settings and the C API.</td>
<td>
typedef boost::date_time::c_local_adjustor&lt;ptime&gt; local_adj;<br>
ptime t10(date(2002,Jan,1), hours(7)); <br>
ptime t11 = local_adj::utc_to_local(t10);<br>
</td></tr>
<tr><td>date_time::local_adjustor&lt;ptime, utc_offset, dst_rules&gt;::<font class="el">utc_to_local</font>(ptime)</td>
<td>Calculate local machine time from a UTC time based daylight savings rules and utc offset</td>
<td><a href="exp-local_utc_conversion.html">example</a>
</td></tr>
<tr><td>date_time::local_adjustor&lt;ptime, utc_offset, dst_rules&gt;::<font class="el">local_to_utc</font>(ptime)</td>
<td>Calculate UTC time based on daylight savings rules and utc offset.</td>
<td><a href="exp-local_utc_conversion.html">example</a>
</td></tr>
</table>
<p>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Thu Sep 5 07:34:28 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
-57
View File
@@ -1,57 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Posix Time System Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>Posix Time System Documentation</h1>
<p>&nbsp;<p>
<hr>
<p>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a>
<p>
<font class="bold">Temporal Types</font>
<p>
<a href="class_ptime.html">Class ptime</a> --
<a href="class_time_duration.html">Class time_duration</a> --
<a href="class_time_period.html">Class time_period</a>
<p>
<font class="bold">Other Topics</font>
<p>
<a href="time_iterators.html">Time Iterators</a> --
<a href="local_time_adjust.html">UTC / Local Time Adjustments</a>
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
Defines a non-adjusted time system with nano-second resolution and
stable calculation properties. This time system uses the Gregorian
calendar to implement the date portion of the time representation.
<p>
<h2><a name="usage">Usage Examples</a></h2>
<table border=1 cellspacing=3 cellpadding=3><tr><td><b>Example</b></td><td><b>Description</b> </td></tr>
<tr><td><a href="exp-time_math.html">Time Math</a></td><td>A few simple calculations using ptime and time_durations. </td></tr>
<tr><td><a href="exp-print_hours.html">Print Hours</a></td><td>Retrieve time from clock, use a time_iterator. </td></tr>
<tr><td><a href="exp-local_utc_conversion.html">Local to UTC Conversion</a></td><td>Demonstrates a couple different ways to convert a local to UTC time including daylight savings rules. </td></tr>
<tr><td><a href="exp-time_periods.html">Time periods</a></td><td>Some simple examples of intersection and display of time periods. </td></table>
<hr>
<address><small>
<!-- hhmts start -->
Last modified: Thu Sep 5 06:19:36 MST 2002
<!-- hhmts end -->
by Jeff Garland &copy 2000-2002
</small></address>
</body>
</html>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

-78
View File
@@ -1,78 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>posix_time::time iterators Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head>
<body>
<a href="../../../index.htm">
<img align="left" src="../../../c++boost.gif" alt="C++ Boost">
</a>
<h1>posix_time::time iterators</h1>
<p>&nbsp;<p>
<hr>
<a href="index.html">Overall Index</a> --
<a href="gregorian.html">Gregorian Index</a> --
<a href="posix_time.html">Posix Time Index</a>
<p>
<font class="bold">Time Iterators</font>
<p>
<a href="#intro">Introduction</a> --
<a href="#header">Header</a> --
<a href="#classoverview">Class Overview</a>
<p>
<h2><a name="intro">Introduction</a></h2>
<p>
Time iterators provide a standard mechanism for iteration through times. Time iterators are a model of
<a href="http://www.sgi.com/tech/stl/InputIterator.html">Input Iterator</a> and can be used to populate collections with times. The following example
iterates using a 15 minute interation interval.
<p>
<div class="fragment"><pre>
<font class="keyword">using namespace</font> boost::gregorian;
<font class="keyword">using namespace</font> boost::posix_time;
date d(2000,Jan,20);
ptime start(d);<font class="comment">//2000-Jan-20 00:00:00</font>
time_iterator titr(start,minutes(15)); <font class="comment">//iterate on 15 minute intervals</font>
<font class="comment">//produces 00:00:00, 00:15:00, 00:30:00, 00:45:00</font>
<font class="keyword">for</font> (; titr &lt; ptime(d,hour(1)); ++titr) {
std::cout &lt;&lt; to_simple_string(*titr) &lt;&lt; std::endl;
}
</pre></div>
<p>
The <a href="exp-print_hours.html">print hours</a>
example iterates through the remainder of the day incrementing by an hour.
<p>
<h2><a name="header">Header</a></h2>
<pre>
#include "boost/date_time/posix_time/posix_time.hpp" //include all types plus i/o
or
#include "boost/date_time/posix_time/posix_time_types.hpp" //no i/o just types
</pre>
<p>
<h2><a name="classoverview">Class Overview</a></h2>
<p>
<table border=1 cellspacing=3 cellpadding=3>
<tr><td><b>Class</b></td>
<td><b>Construction Parameters</b></td>
<td><b>Description</b></td></tr>
<tr><td>time_iterator</td>
<td>ptime start_time, time_duration increment</td>
<td>Iterate incrementing by the specified duration.</td></tr>
</table>
<hr><address><small>
<!-- hhmts start -->
Last modified: Thu Sep 5 07:23:04 MST 2002
<!-- hhmts end -->
by <a href="mailto:jeff&#64;crystalclearsoftware.com">Jeff Garland</a> &copy; 2000-2002
</small></address>
</body>
</html>
+35 -71
View File
@@ -1,83 +1,47 @@
subproject libs/date_time/example ;
project : requirements <library>/boost/date_time//boost_date_time ;
exe dates_as_strings : <lib>../build/boost_date_time
gregorian/dates_as_strings.cpp
: <include>$(BOOST_ROOT)
;
exe dates_as_strings : gregorian/dates_as_strings.cpp ;
exe days_alive : gregorian/days_alive.cpp ;
exe days_till_new_year : gregorian/days_till_new_year.cpp ;
exe days_alive : <lib>../build/boost_date_time
gregorian/days_alive.cpp
: <include>$(BOOST_ROOT)
exe days_between_new_years : gregorian/days_between_new_years.cpp ;
exe find_last_day_of_months : gregorian/find_last_day_of_months.cpp ;
exe month_add : gregorian/month_add.cpp ;
exe localization : gregorian/localization.cpp ;
exe print_holidays : gregorian/print_holidays.cpp ;
exe print_month : gregorian/print_month.cpp ;
exe period_calc : gregorian/period_calc.cpp ;
exe days_since_year_start : gregorian/days_since_year_start.cpp ;
exe local_utc_conversion : posix_time/local_utc_conversion.cpp
: <define>BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
;
exe days_till_new_year : <lib>../build/boost_date_time
gregorian/days_till_new_year.cpp
: <include>$(BOOST_ROOT)
exe print_hours : posix_time/print_hours.cpp
: <define>BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
;
exe end_of_month_day : <lib>../build/boost_date_time
gregorian/end_of_month_day.cpp
: <include>$(BOOST_ROOT)
exe time_math : posix_time/time_math.cpp
: <define>BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
;
exe month_add : <lib>../build/boost_date_time
gregorian/month_add.cpp
: <include>$(BOOST_ROOT)
;
exe time_periods : posix_time/time_periods.cpp
: <define>BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
;
exe localization : <lib>../build/boost_date_time
gregorian/localization.cpp
: <include>$(BOOST_ROOT)
;
exe simple_time_zone : local_time/simple_time_zone.cpp ;
exe calc_rules : local_time/calc_rules.cpp ;
exe seconds_since_epoch : local_time/seconds_since_epoch.cpp ;
exe flight : local_time/flight.cpp ;
exe io_tutorial : tutorial/io_tutorial.cpp ;
exe print_holidays : <lib>../build/boost_date_time
gregorian/print_holidays.cpp
: <include>$(BOOST_ROOT)
;
exe print_month : <lib>../build/boost_date_time
gregorian/print_month.cpp
: <include>$(BOOST_ROOT)
;
exe period_calc : <lib>../build/boost_date_time
gregorian/period_calc.cpp
: <include>$(BOOST_ROOT)
;
exe days_since_year_start : <lib>../build/boost_date_time
gregorian/days_since_year_start.cpp
: <include>$(BOOST_ROOT)
;
exe local_utc_conversion : <lib>../build/boost_date_time
posix_time/local_utc_conversion.cpp
: <include>$(BOOST_ROOT) <define>BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
;
exe print_hours : <lib>../build/boost_date_time
posix_time/print_hours.cpp
: <include>$(BOOST_ROOT) <define>BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
;
exe time_math : <lib>../build/boost_date_time
posix_time/time_math.cpp
: <include>$(BOOST_ROOT) <define>BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
;
exe time_periods : <lib>../build/boost_date_time
posix_time/time_periods.cpp
: <include>$(BOOST_ROOT) <define>BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
;
# Copyright (c) 2002
# Copyright (c) 2002-2005
# CrystalClear Software, Inc.
#
# Permission to use, copy, modify, distribute and sell this software
# and its documentation for any purpose is hereby granted without fee,
# provided that the above copyright notice appear in all copies and
# that both that copyright notice and this permission notice appear
# in supporting documentation. CrystalClear Software makes no
# representations about the suitability of this software for any
# purpose. It is provided "as is" without express or implied warranty.
# Subject to the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or
# http://www.boost.org/LICENSE_1_0.txt)
+5
View File
@@ -1,3 +1,8 @@
# Copyright (c) 2002-2006 CrystalClear Software, Inc.
# Use, modification and distribution is subject to the
# Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
#
project
: requirements <library>../../build/boost_date_time
@@ -0,0 +1,127 @@
#include "boost/date_time/gregorian/gregorian.hpp"
#include "boost/date_time/gregorian/greg_serialize.hpp"
#include "boost/serialization/set.hpp"
#include "boost/serialization/list.hpp"
#include "boost/archive/text_oarchive.hpp"
#include "boost/archive/text_iarchive.hpp"
#include <iostream>
#include <fstream>
using namespace boost::gregorian;
typedef std::set<date> date_set;
typedef std::list<date> date_list;
void print(std::ostream& os, const date_set& ds)
{
os << "******** Date Set *********" << std::endl;
date_set::const_iterator itr = ds.begin();
while (itr != ds.end())
{
os << (*itr) << " ";
itr++;
}
os << "\n***************************" << std::endl;
}
class foo {
public:
foo(date d = date(not_a_date_time),
int i = 0) :
my_date(d),
my_int(i)
{}
void insert_date(date d)
{
my_dates.push_back(d);
}
void print(std::ostream& os) const
{
os << "foo= my_date is: " << my_date
<< " my_int is: " << my_int;
date_list::const_iterator i = my_dates.begin();
os << " Important dates: ";
while (i != my_dates.end()) {
os << (*i) << " ";
i++;
}
os << std::endl;
}
private:
friend class boost::serialization::access;
// is a type of input archive the & operator is defined similar to >>.
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & my_date;
ar & my_int;
ar & my_dates;
}
date my_date;
int my_int;
date_list my_dates;
};
int
main()
{
try {
date d(2004, Apr, 5);
std::cout << "Date: " << to_iso_string(d) << std::endl;
std::cout << "Date: " << d << std::endl;
std::ofstream ofs("date_demo.txt");
boost::archive::text_oarchive oa(ofs);
oa << d;
std::cout << "Construct a foo" << std::endl;
foo f(d, 1);
f.insert_date(d+days(1));
f.insert_date(d+days(2));
f.insert_date(d+days(3));
f.print(std::cout);
oa << f;
date_set dates;
dates.insert(date(2004, Apr,1));
dates.insert(date(2004, Apr,10));
dates.insert(date(2004, Apr,15));
print(std::cout, dates);
oa << dates;
ofs.close();
std::cout << "Now do the input streaming" << std::endl;
date d2(not_a_date_time);
std::ifstream ifs("date_demo.txt");
boost::archive::text_iarchive ia(ifs);
ia >> d2;
std::cout << "New date is: " << d2 << std::endl;
foo f2;
ia >> f2;
f2.print(std::cout);
date_set dates2;
ia >> dates2; //exception here
print(std::cout, dates2);
}
catch(std::exception& e) {
std::cout << "Caught Exception: " << e.what() << std::endl;
}
}
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+22 -20
View File
@@ -1,22 +1,17 @@
/*
The following is a simple example that shows conversion of dates to and
from a std::string.
Expected output:
2001-Oct-09
2001-10-09
Tuesday October 9, 2001
An expected exception is next:
Exception: Month number is out of range 1..12
*/
/* The following is a simple example that shows conversion of dates
* to and from a std::string.
*
* Expected output:
* 2001-Oct-09
* 2001-10-09
* Tuesday October 9, 2001
* An expected exception is next:
* Exception: Month number is out of range 1..12
*/
#include "boost/date_time/gregorian/gregorian.hpp"
#include "boost/date_time/date_parsing.hpp"
#include <iostream>
#include <string>
int
main()
@@ -26,11 +21,11 @@ main()
try {
// The following date is in ISO 8601 extended format (CCYY-MM-DD)
std::string s("2001-10-9"); //2001-October-05
date d(from_string(s));
std::string s("2001-10-9"); //2001-October-09
date d(from_simple_string(s));
std::cout << to_simple_string(d) << std::endl;
//Read ISO Standard(CCYYMMDD) and output ISO Extended
//Read ISO 8601 Standard(CCYYMMDD) and output ISO 8601 Extended
std::string ud("20011009"); //2001-Oct-09
date d1(from_undelimited_string(ud));
std::cout << to_iso_extended_string(d1) << std::endl;
@@ -43,13 +38,12 @@ main()
<< ymd.day << ", " << ymd.year
<< std::endl;
//Let's send in month 25 by accident and create an exception
std::string bad_date("20012509"); //2001-??-09
std::cout << "An expected exception is next: " << std::endl;
date wont_construct(from_undelimited_string(bad_date));
//use wont_construct so compiler doesn't complain, but you wont get here!
std::cout << "oh oh, you should reach this line: "
std::cout << "oh oh, you shouldn't reach this line: "
<< to_iso_string(wont_construct) << std::endl;
}
catch(std::exception& e) {
@@ -59,3 +53,11 @@ main()
return 0;
}
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+18 -7
View File
@@ -1,6 +1,9 @@
/* Short example that calculates the number of days since user was born.
* Demonstrates comparisons of durations, use of the day_clock,
* and parsing a date from a string.
*/
#include "boost/date_time/gregorian/gregorian.hpp"
#include "boost/date_time/date_parsing.hpp"
#include <iostream>
int
@@ -12,15 +15,14 @@ main()
std::cout << "Enter birth day YYYY-MM-DD (eg: 2002-02-01): ";
std::cin >> s;
try {
date birthday(boost::date_time::parse_date<date>(s));
//date birthday(2002,Jan,1);
date birthday(from_simple_string(s));
date today = day_clock::local_day();
date_duration days_alive = today - birthday;
date_duration one_day(1);
days days_alive = today - birthday;
days one_day(1);
if (days_alive == one_day) {
std::cout << "Born yesterday, very funny" << std::endl;
}
else if (days_alive < date_duration(0)) {
else if (days_alive < days(0)) {
std::cout << "Not born yet, hmm: " << days_alive.days()
<< " days" <<std::endl;
}
@@ -33,4 +35,13 @@ main()
std::cout << "Bad date entered: " << s << std::endl;
}
return 0;
};
}
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
@@ -0,0 +1,38 @@
/* Provides a simple example of using a date_generator, and simple
* mathematical operatorations, to calculate the days since
* New Years day of this year, and days until next New Years day.
*
* Expected results:
* Adding together both durations will produce 365 (366 in a leap year).
*/
#include "boost/date_time/gregorian/gregorian.hpp"
#include <iostream>
int
main()
{
using namespace boost::gregorian;
date today = day_clock::local_day();
partial_date new_years_day(1,Jan);
//Subtract two dates to get a duration
days days_since_year_start = today - new_years_day.get_date(today.year());
std::cout << "Days since Jan 1: " << days_since_year_start.days()
<< std::endl;
days days_until_year_start = new_years_day.get_date(today.year()+1) - today;
std::cout << "Days until next Jan 1: " << days_until_year_start.days()
<< std::endl;
return 0;
}
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+10 -2
View File
@@ -1,6 +1,6 @@
#include <iostream>
#include "boost/date_time/gregorian/gregorian.hpp"
#include <iostream>
int
main()
@@ -14,4 +14,12 @@ main()
std::cout << "Days since Jan 1: " << days_since_year_start.days()
<< std::endl;
return 0;
};
}
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+26
View File
@@ -0,0 +1,26 @@
// This example displays the amount of time until new year's in days
#include "boost/date_time/gregorian/gregorian.hpp"
#include <iostream>
int
main()
{
using namespace boost::gregorian;
date::ymd_type today = day_clock::local_day_ymd();
date new_years_day(today.year + 1,1,1);
date_duration dd = new_years_day - date(today);
std::cout << "Days till new year: " << dd.days() << std::endl;
return 0;
}
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+46
View File
@@ -0,0 +1,46 @@
/* Simple program that uses the gregorian calendar to find the last
* day of the month and then display the last day of every month left
* in the year.
*/
#include "boost/date_time/gregorian/gregorian.hpp"
#include <iostream>
int
main()
{
using namespace boost::gregorian;
std::cout << " Enter Year(ex: 2002): ";
int year, month;
std::cin >> year;
std::cout << " Enter Month(1..12): ";
std::cin >> month;
try {
int day = gregorian_calendar::end_of_month_day(year,month);
date end_of_month(year,month,day);
//Iterate thru by months --
month_iterator mitr(end_of_month,1);
date start_of_next_year(year+1, Jan, 1);
//loop thru the days and print each one
while (mitr < start_of_next_year){
std::cout << to_simple_string(*mitr) << std::endl;
++mitr;
}
}
catch(...) {
std::cout << "Invalid Date Entered" << std::endl;
}
return 0;
}
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
@@ -0,0 +1,54 @@
/* Simple program that finds the last day of the given month,
* then displays the last day of every month left in the given year.
*/
#include "boost/date_time/gregorian/gregorian.hpp"
#include <iostream>
int
main()
{
using namespace boost::gregorian;
greg_year year(1400);
greg_month month(1);
// get a month and a year from the user
try {
greg_year::value_type y;
greg_month::value_type m;
std::cout << " Enter Year(ex: 2002): ";
std::cin >> y;
year = greg_year(y);
std::cout << " Enter Month(1..12): ";
std::cin >> m;
month = greg_month(m);
}
catch(const bad_year& by) {
std::cout << "Invalid Year Entered: " << by.what() << '\n'
<< "Using minimum values for month and year." << std::endl;
}
catch(const bad_month& bm) {
std::cout << "Invalid Month Entered" << bm.what() << '\n'
<< "Using minimum value for month. " << std::endl;
}
date start_of_next_year(year+1, Jan, 1);
date d(year, month, 1);
// add another month to d until we enter the next year.
while (d < start_of_next_year){
std::cout << to_simple_string(d.end_of_month()) << std::endl;
d += months(1);
}
return 0;
}
/* Copyright 2001-2005: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+77 -89
View File
@@ -1,112 +1,100 @@
/*
The following shows the creation of a facet for the output of
dates in German (please forgive me for any errors in my German --
I'm not a native speaker).
*/
/* The following shows the creation of a facet for the output of
* dates in German (please forgive me for any errors in my German --
* I'm not a native speaker).
*/
#include "boost/date_time/gregorian/gregorian.hpp"
#include <iostream>
#include <algorithm>
//Define a series of char arrays for short and long name strings to be
//associated with date output.
const char* const de_short_month_names[]={"Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez", "NAM"};
const char* const de_long_month_names[]={"Januar","Februar","Marz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember","NichtDerMonat"};
const char* const de_special_value_names[]={"NichtDatumzeit","-unbegrenztheit", "+unbegrenztheit"};
const char* const de_long_weekday_names[]={"Sonntag", "Montag", "Dienstag","Mittwoch", "Donnerstag", "Freitag", "Samstag"};
const char* const de_short_weekday_names[]={"Son", "Mon", "Die","Mit", "Don", "Fre", "Sam"};
const char* const us_short_month_names[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec", "NAD"};
const char* const us_long_month_names[]={"January","February","March","April","May","June","July","August","September","October","November","December","Not-A-Date"};
const char* const us_special_value_names[]={"Not-A-Date","-infinity", "+infinity"};
const char* const us_long_weekday_names[]={"Sunday", "Monday", "Tuesday","Wenesday", "Thursday", "Friday", "Saturday"};
const char* const us_short_weekday_names[]={"Sun", "Mon", "Tue","Wed", "Thu", "Fri", "Sat"};
int
main()
/* Define a series of char arrays for short and long name strings
* to be associated with German date output (US names will be
* retrieved from the locale). */
const char* const de_short_month_names[] =
{
"Jan", "Feb", "Mar", "Apr", "Mai", "Jun",
"Jul", "Aug", "Sep", "Okt", "Nov", "Dez", "NAM"
};
const char* const de_long_month_names[] =
{
"Januar", "Februar", "Marz", "April", "Mai",
"Juni", "Juli", "August", "September", "Oktober",
"November", "Dezember", "NichtDerMonat"
};
const char* const de_long_weekday_names[] =
{
"Sonntag", "Montag", "Dienstag", "Mittwoch",
"Donnerstag", "Freitag", "Samstag"
};
const char* const de_short_weekday_names[] =
{
"Son", "Mon", "Die","Mit", "Don", "Fre", "Sam"
};
#ifndef BOOST_DATE_TIME_NO_LOCALE
int main()
{
using namespace boost::gregorian;
typedef boost::date_time::all_date_names_put<greg_facet_config> date_facet;
//create a new local
std::locale default_locale;
std::locale german_dates1(default_locale,
new date_facet(de_short_month_names,
de_long_month_names,
de_special_value_names,
de_short_weekday_names,
de_long_weekday_names,
'.',
boost::date_time::ymd_order_dmy,
boost::date_time::month_as_integer));
// create some gregorian objects to output
date d1(2002, Oct, 1);
std::cout.imbue(german_dates1);
greg_month m = d1.month();
greg_weekday wd = d1.day_of_week();
// create a facet and a locale for German dates
date_facet* german_facet = new date_facet();
std::cout.imbue(std::locale(std::locale::classic(), german_facet));
// create the German name collections
date_facet::input_collection_type short_months, long_months,
short_weekdays, long_weekdays;
std::copy(&de_short_month_names[0], &de_short_month_names[11],
std::back_inserter(short_months));
std::copy(&de_long_month_names[0], &de_long_month_names[11],
std::back_inserter(long_months));
std::copy(&de_short_weekday_names[0], &de_short_weekday_names[6],
std::back_inserter(short_weekdays));
std::copy(&de_long_weekday_names[0], &de_long_weekday_names[6],
std::back_inserter(long_weekdays));
// replace the default names with ours
// NOTE: date_generators and special_values were not replaced as
// they are not used in this example
german_facet->short_month_names(short_months);
german_facet->long_month_names(long_months);
german_facet->short_weekday_names(short_weekdays);
german_facet->long_weekday_names(long_weekdays);
// output the date in German using short month names
german_facet->format("%d.%m.%Y");
std::cout << d1 << std::endl; //01.10.2002
std::locale german_dates2(default_locale,
new date_facet(de_short_month_names,
de_long_month_names,
de_special_value_names,
de_short_weekday_names,
de_long_weekday_names,
'.',
boost::date_time::ymd_order_dmy,
boost::date_time::month_as_long_string));
std::cout.imbue(german_dates2);
greg_month m = d1.month();
german_facet->month_format("%B");
std::cout << m << std::endl; //Oktober
greg_weekday wd = d1.day_of_week();
german_facet->weekday_format("%A");
std::cout << wd << std::endl; //Dienstag
//Numeric date format with US month/day/year ordering
std::locale usa_dates1(default_locale,
new date_facet(us_short_month_names,
us_long_month_names,
us_special_value_names,
us_short_weekday_names,
us_long_weekday_names,
'/',
boost::date_time::ymd_order_us,
boost::date_time::month_as_integer));
std::cout.imbue(usa_dates1);
std::cout << d1 << std::endl; // 10/01/2002
//English names, iso order (year-month-day), '-' separator
std::locale usa_dates2(default_locale,
new date_facet(us_short_month_names,
us_long_month_names,
us_special_value_names,
us_short_weekday_names,
us_long_weekday_names,
'-',
boost::date_time::ymd_order_iso,
boost::date_time::month_as_short_string));
// Output the same gregorian objects using US names
date_facet* us_facet = new date_facet();
std::cout.imbue(std::locale(std::locale::classic(), us_facet));
std::cout.imbue(usa_dates2);
us_facet->format("%m/%d/%Y");
std::cout << d1 << std::endl; // 10/01/2002
// English names, ISO 8601 order (year-month-day), '-' separator
us_facet->format("%Y-%b-%d");
std::cout << d1 << std::endl; // 2002-Oct-01
#else
std::cout << "Sorry, localization is not supported by this compiler/library"
<< std::endl;
#endif
return 0;
}
/* Copyright 2001-2005: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+58
View File
@@ -0,0 +1,58 @@
/* Simple program that uses the gregorian calendar to progress by exactly
* one month, regardless of how many days are in that month.
*
* This method can be used as an alternative to iterators
*/
#include "boost/date_time/gregorian/gregorian.hpp"
#include <iostream>
int
main()
{
using namespace boost::gregorian;
date d = day_clock::local_day();
date d2 = d + months(1);
date d3 = d - months(1);
std::cout << "Today is: " << to_simple_string(d) << ".\n"
<< "One month from today will be: " << to_simple_string(d2) << ".\n"
<< "One month ago was: " << to_simple_string(d3)
<< std::endl;
std::cout << "******** Warning read this ***********************\n";
std::cout << "Be aware that adding a month is not exactly like regular numeric math.\n"
<< "Addition/Subtraction of months will 'snap to the end' of a month that\n"
<< "is shorter than the current month. For example consider "
<< "Jan 31, 2004 + (1 month)\n";
date d4(2004, Jan, 31);
date d5 = d4 + months(1);
std::cout << "Result is: " << to_simple_string(d5)
<< std::endl;
std::cout << "\nSo what does this mean? It means the result of adding months is order\n"
<< "dependent, non-commutative, and may create problems for applications.\n"
<< "Consider: \n"
<< "Jan 30, 2004 + (1 month) + (1 month) != Jan 30, 2004 + (2 months)\n"
<< "Why not? Because Jan 30, 2004 + 1 month is Feb 29 + 1 month is Mar 31st.\n"
<< "while Jan 30, 2004 + 2 months is Mar 30th.\n"
<< "All of this clears up as long as all the starting dates before the 28th of\n"
<< "the month -- then all the behavior follows classical mathematical rules.\n";
date d6(2004, Jan, 30);
date d7 = d6 + months(1) + months(1);
date d8 = d6 + months(2);
std::cout << "2004-01-30 + (1 month) + (1 month) is: " << to_simple_string(d7) << ".\n"
<< "2004-01-30 + (2 months) is: " << to_simple_string(d8)
<< std::endl;
return 0;
}
/* Copyright 2001-2005: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+8
View File
@@ -76,3 +76,11 @@ int main()
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+50 -58
View File
@@ -1,16 +1,15 @@
/*generate a set of dates using a collections of date generators
Output looks like:
Enter Year: 2002
2002-Jan-01 [Tue]
2002-Jan-21 [Mon]
2002-Feb-12 [Tue]
2002-Jul-04 [Thu]
2002-Sep-02 [Mon]
2002-Nov-28 [Thu]
2002-Dec-25 [Wed]
Number Holidays: 7
*/
/* Generate a set of dates using a collection of date generators
* Output looks like:
* Enter Year: 2002
* 2002-Jan-01 [Tue]
* 2002-Jan-21 [Mon]
* 2002-Feb-12 [Tue]
* 2002-Jul-04 [Thu]
* 2002-Sep-02 [Mon]
* 2002-Nov-28 [Thu]
* 2002-Dec-25 [Wed]
* Number Holidays: 7
*/
#include "boost/date_time/gregorian/gregorian.hpp"
#include <algorithm>
@@ -19,73 +18,66 @@ Number Holidays: 7
#include <iostream>
#include <set>
void
print_date(boost::gregorian::date d)
{
using namespace boost::gregorian;
#if defined(BOOST_DATE_TIME_NO_LOCALE)
std::cout << to_simple_string(d) << " [" << d.day_of_week() << "]\n";
#else
std::cout << d << " [" << d.day_of_week() << "]\n";
#endif
}
int
main() {
std::cout << "Enter Year: ";
int year;
std::cin >> year;
using namespace boost::gregorian;
std::cout << "Enter Year: ";
greg_year::value_type year;
std::cin >> year;
//define a collection of holidays fixed by month and day
std::vector<partial_date> holidays;
holidays.push_back(partial_date(1,Jan)); //Western New Year
holidays.push_back(partial_date(4,Jul)); //US Independence Day
holidays.push_back(partial_date(25, Dec));//Christmas day
std::vector<year_based_generator*> holidays;
holidays.push_back(new partial_date(1,Jan)); //Western New Year
holidays.push_back(new partial_date(4,Jul)); //US Independence Day
holidays.push_back(new partial_date(25, Dec));//Christmas day
//define a shorthand for the nkday function object
typedef boost::date_time::nth_kday_of_month<date> nkday;
//define a collection of nth kday holidays
std::vector<nkday> more_holidays;
more_holidays.push_back(nkday(nkday::first, Monday, Sep)); //US labor day
more_holidays.push_back(nkday(nkday::third, Monday, Jan)); //MLK Day
more_holidays.push_back(nkday(nkday::second, Tuesday, Feb)); //Pres day
more_holidays.push_back(nkday(nkday::fourth, Thursday, Nov)); //Thanksgiving
//define a shorthand for the nth_day_of_the_week_in_month function object
typedef nth_day_of_the_week_in_month nth_dow;
//US labor day
holidays.push_back(new nth_dow(nth_dow::first, Monday, Sep));
//MLK Day
holidays.push_back(new nth_dow(nth_dow::third, Monday, Jan));
//Pres day
holidays.push_back(new nth_dow(nth_dow::second, Tuesday, Feb));
//Thanksgiving
holidays.push_back(new nth_dow(nth_dow::fourth, Thursday, Nov));
typedef std::set<date> date_set;
date_set all_holidays;
#if (defined(BOOST_MSVC) && (_MSC_VER <= 1200)) // 1200 == VC++ 6.0
std::cout << "Sorry, this example temporarily disabled on VC 6.\n"
<< "The std::transform isn't accepted by the compiler\n"
<< "So if you hack up the example without std::transform\n"
<< "it should work\n"
<< std::endl;
#else
//generate a set of concrete dates from the 'partial_date' holidays
//by calling the get_date functions
std::transform(holidays.begin(), holidays.end(),
std::insert_iterator<date_set>(all_holidays, all_holidays.begin()),
std::bind2nd(std::mem_fun_ref(&partial_date::get_date),
year));
//Now add in the 'floating' holidays
std::transform(more_holidays.begin(), more_holidays.end(),
std::insert_iterator<date_set>(all_holidays, all_holidays.begin()),
std::bind2nd(std::mem_fun_ref(&nkday::get_date),
year));
for(std::vector<year_based_generator*>::iterator it = holidays.begin();
it != holidays.end(); ++it)
{
all_holidays.insert((*it)->get_date(year));
}
//print the holidays to the screen
std::for_each(all_holidays.begin(), all_holidays.end(), print_date);
std::cout << "Number Holidays: " << all_holidays.size() << std::endl;
#endif
return 0;
return 0;
}
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+33 -19
View File
@@ -1,18 +1,17 @@
/*
This example prints all the dates in a month. It demonstrates
the use of iterators as well as functions of the gregorian_calendar
Output:
Enter Year: 2002
Enter Month(1..12): 2
2002-Feb-01 [Fri]
2002-Feb-02 [Sat]
2002-Feb-03 [Sun]
2002-Feb-04 [Mon]
2002-Feb-05 [Tue]
2002-Feb-06 [Wed]
2002-Feb-07 [Thu]
*/
/* This example prints all the dates in a month. It demonstrates
* the use of iterators as well as functions of the gregorian_calendar
*
* Output:
* Enter Year: 2002
* Enter Month(1..12): 2
* 2002-Feb-01 [Fri]
* 2002-Feb-02 [Sat]
* 2002-Feb-03 [Sun]
* 2002-Feb-04 [Mon]
* 2002-Feb-05 [Tue]
* 2002-Feb-06 [Wed]
* 2002-Feb-07 [Thu]
*/
#include "boost/date_time/gregorian/gregorian.hpp"
#include <iostream>
@@ -20,24 +19,31 @@ Enter Month(1..12): 2
int
main()
{
using namespace boost::gregorian;
std::cout << "Enter Year: ";
int year, month;
greg_year::value_type year;
greg_month::value_type month;
std::cin >> year;
std::cout << "Enter Month(1..12): ";
std::cin >> month;
using namespace boost::gregorian;
try {
//Use the calendar to get the last day of the month
int eom_day = gregorian_calendar::end_of_month_day(year,month);
greg_day::value_type eom_day = gregorian_calendar::end_of_month_day(year,month);
date endOfMonth(year,month,eom_day);
//construct an iterator starting with firt day of the month
day_iterator ditr(date(year,month,1));
//loop thru the days and print each one
for (; ditr <= endOfMonth; ++ditr) {
#if defined(BOOST_DATE_TIME_NO_LOCALE)
std::cout << to_simple_string(*ditr) << " ["
#else
std::cout << *ditr << " ["
<< ditr->day_of_week() << "]"
#endif
<< ditr->day_of_week() << " week: "
<< ditr->week_number() << "]"
<< std::endl;
}
}
@@ -48,3 +54,11 @@ main()
}
return 0;
}
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+47
View File
@@ -0,0 +1,47 @@
/* A simple example for creating various dst_calc_rule instances
*/
#include "boost/date_time/gregorian/gregorian.hpp"
#include "boost/date_time/local_time/local_time.hpp"
#include <iostream>
int
main()
{
using namespace boost;
using namespace local_time;
using namespace gregorian;
/***** create the necessary date_generator objects *****/
// starting generators
first_day_of_the_week_in_month fd_start(Sunday, May);
last_day_of_the_week_in_month ld_start(Sunday, May);
nth_day_of_the_week_in_month nkd_start(nth_day_of_the_week_in_month::third,
Sunday, May);
partial_date pd_start(1, May);
// ending generators
first_day_of_the_week_in_month fd_end(Sunday, Oct);
last_day_of_the_week_in_month ld_end(Sunday, Oct);
nth_day_of_the_week_in_month nkd_end(nth_day_of_the_week_in_month::third,
Sunday, Oct);
partial_date pd_end(31, Oct);
/***** create the various dst_calc_rule objects *****/
dst_calc_rule_ptr pdr(new partial_date_dst_rule(pd_start, pd_end));
dst_calc_rule_ptr flr(new first_last_dst_rule(fd_start, ld_end));
dst_calc_rule_ptr llr(new last_last_dst_rule(ld_start, ld_end));
dst_calc_rule_ptr nlr(new nth_last_dst_rule(nkd_start, ld_end));
dst_calc_rule_ptr ndr(new nth_day_of_the_week_in_month_dst_rule(nkd_start, nkd_end));
std::cout << "Program run successfully" << std::endl;
return 0;
}
/* Copyright 2001-2005: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+60
View File
@@ -0,0 +1,60 @@
#include "boost/date_time/local_time/local_time.hpp"
#include <iostream>
/* This example shows a program that calculates the arrival time of a plane
* that flys from Phoenix to New York. During the flight New York shifts
* into daylight savings time (Phoenix doesn't because Arizona doesn't use
* DST).
*
*
*/
int main()
{
using namespace boost::gregorian;
using namespace boost::local_time;
using namespace boost::posix_time;
//setup some timezones for creating and adjusting local times
//This user editable file can be found in libs/date_time/data.
tz_database tz_db;
try {
tz_db.load_from_file("../../data/date_time_zonespec.csv");
}catch(const data_not_accessible& dna) {
std::cerr << "Error with time zone data file: " << dna.what() << std::endl;
exit(EXIT_FAILURE);
}catch(const bad_field_count& bfc) {
std::cerr << "Error with time zone data file: " << bfc.what() << std::endl;
exit(EXIT_FAILURE);
}
time_zone_ptr nyc_tz = tz_db.time_zone_from_region("America/New_York");
//Use a newly created time zone rule
time_zone_ptr phx_tz(new posix_time_zone("MST-07:00:00"));
//local departure time in Phoenix is 11 pm on March 13 2010
// (NY changes to DST on March 14 at 2 am)
local_date_time phx_departure(date(2010, Mar, 13), hours(23),
phx_tz,
local_date_time::NOT_DATE_TIME_ON_ERROR);
local_date_time nyc_departure = phx_departure.local_time_in(nyc_tz);
time_duration flight_length = hours(4) + minutes(30);
local_date_time phx_arrival = phx_departure + flight_length;
local_date_time nyc_arrival = phx_arrival.local_time_in(nyc_tz);
std::cout << "departure PHX time: " << phx_departure << std::endl;
std::cout << "departure NYC time: " << nyc_departure << std::endl;
std::cout << "arrival PHX time: " << phx_arrival << std::endl;
std::cout << "arrival NYC time: " << nyc_arrival << std::endl;
}
/* Copyright 2005: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+45
View File
@@ -0,0 +1,45 @@
#include "boost/date_time/gregorian/gregorian.hpp"
#include "boost/date_time/posix_time/posix_time.hpp"
#include "boost/date_time/local_time/local_time.hpp"
#include <iostream>
#include <locale>
int main() {
using namespace boost::gregorian;
using namespace boost::posix_time;
using namespace boost::local_time;
tz_database tz_db;
try {
tz_db.load_from_file("../../data/date_time_zonespec.csv");
}catch(data_not_accessible dna) {
std::cerr << "Error with time zone data file: " << dna.what() << std::endl;
exit(EXIT_FAILURE);
}catch(bad_field_count bfc) {
std::cerr << "Error with time zone data file: " << bfc.what() << std::endl;
exit(EXIT_FAILURE);
}
time_zone_ptr nyc = tz_db.time_zone_from_region("America/New_York");
local_date_time ny_time(date(2004, Aug, 30), hours(10), nyc, true);
typedef boost::date_time::time_facet<local_date_time, char> ldt_facet;
ldt_facet* timefacet = new ldt_facet("%Y-%b-%d %H:%M:%S""%F %Z");
std::locale loc(std::locale::classic(), timefacet);
std::cout << ny_time << std::endl;
// 2004-Aug-30 10:00:00 EDT
std::cout.imbue(loc);
std::cout << ny_time << std::endl;
// 2004-Aug-30 10:00:00 Eastern Daylight Time
return 0;
}
/* Copyright 2004-2005: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
@@ -0,0 +1,65 @@
/* This example demonstrates the use of the time zone database and
* local time to calculate the number of seconds since the UTC
* time_t epoch 1970-01-01 00:00:00. Note that the selected timezone
* could be any timezone supported in the time zone database file which
* can be modified and updated as needed by the user.
*
* To solve this problem the following steps are required:
* 1) Get a timezone from the tz database for the local time
* 2) Construct a local time using the timezone
* 3) Construct a posix_time::ptime for the time_t epoch time
* 4) Convert the local_time to utc and subtract the epoch time
*
*/
#include "boost/date_time/local_time/local_time.hpp"
#include <iostream>
int main()
{
using namespace boost::gregorian;
using namespace boost::local_time;
using namespace boost::posix_time;
tz_database tz_db;
try {
tz_db.load_from_file("../data/date_time_zonespec.csv");
}catch(const data_not_accessible& dna) {
std::cerr << "Error with time zone data file: " << dna.what() << std::endl;
exit(EXIT_FAILURE);
}catch(const bad_field_count& bfc) {
std::cerr << "Error with time zone data file: " << bfc.what() << std::endl;
exit(EXIT_FAILURE);
}
time_zone_ptr nyc_tz = tz_db.time_zone_from_region("America/New_York");
date in_date(2004,10,04);
time_duration td(12,14,32);
// construct with local time value
// create not-a-date-time if invalid (eg: in dst transition)
local_date_time nyc_time(in_date,
td,
nyc_tz,
local_date_time::NOT_DATE_TIME_ON_ERROR);
std::cout << nyc_time << std::endl;
ptime time_t_epoch(date(1970,1,1));
std::cout << time_t_epoch << std::endl;
// first convert nyc_time to utc via the utc_time()
// call and subtract the ptime.
time_duration diff = nyc_time.utc_time() - time_t_epoch;
//Expected 1096906472
std::cout << "Seconds diff: " << diff.total_seconds() << std::endl;
}
/* Copyright 2005: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+86
View File
@@ -0,0 +1,86 @@
/* A simple example for using a custom_time_zone and a posix_time_zone.
*/
#include "boost/date_time/local_time/local_time.hpp"
#include <iostream>
int
main()
{
using namespace boost;
using namespace local_time;
using namespace gregorian;
using posix_time::time_duration;
/***** custom_time_zone *****/
// create the dependent objects for a custom_time_zone
time_zone_names tzn("Eastern Standard Time", "EST",
"Eastern Daylight Time", "EDT");
time_duration utc_offset(-5,0,0);
dst_adjustment_offsets adj_offsets(time_duration(1,0,0),
time_duration(2,0,0),
time_duration(2,0,0));
// rules for this zone are:
// start on first Sunday of April at 2 am
// end on last Sunday of October at 2 am
// so we use a first_last_dst_rule
first_day_of_the_week_in_month start_rule(Sunday, Apr);
last_day_of_the_week_in_month end_rule(Sunday, Oct);
shared_ptr<dst_calc_rule> nyc_rules(new first_last_dst_rule(start_rule,
end_rule));
// create more dependent objects for a non-dst custom_time_zone
time_zone_names tzn2("Mountain Standard Time", "MST",
"", ""); // no dst means empty dst strings
time_duration utc_offset2(-7,0,0);
dst_adjustment_offsets adj_offsets2(time_duration(0,0,0),
time_duration(0,0,0),
time_duration(0,0,0));
// no dst means we need a null pointer to the rules
shared_ptr<dst_calc_rule> phx_rules;
// create the custom_time_zones
time_zone_ptr nyc_1(new custom_time_zone(tzn, utc_offset, adj_offsets, nyc_rules));
time_zone_ptr phx_1(new custom_time_zone(tzn2, utc_offset2, adj_offsets2, phx_rules));
/***** posix_time_zone *****/
// create posix_time_zones that are the duplicates of the
// custom_time_zones created above. See posix_time_zone documentation
// for details on full zone names.
std::string nyc_string, phx_string;
nyc_string = "EST-05:00:00EDT+01:00:00,M4.1.0/02:00:00,M10.5.0/02:00:00";
// nyc_string = "EST-05EDT,M4.1.0,M10.5.0"; // shorter when defaults used
phx_string = "MST-07"; // no-dst
time_zone_ptr nyc_2(new posix_time_zone(nyc_string));
time_zone_ptr phx_2(new posix_time_zone(phx_string));
/***** show the sets are equal *****/
std::cout << "The first zone is in daylight savings from:\n "
<< nyc_1->dst_local_start_time(2004) << " through "
<< nyc_1->dst_local_end_time(2004) << std::endl;
std::cout << "The second zone is in daylight savings from:\n "
<< nyc_2->dst_local_start_time(2004) << " through "
<< nyc_2->dst_local_end_time(2004) << std::endl;
std::cout << "The third zone (no daylight savings):\n "
<< phx_1->std_zone_abbrev() << " and "
<< phx_1->base_utc_offset() << std::endl;
std::cout << "The fourth zone (no daylight savings):\n "
<< phx_2->std_zone_abbrev() << " and "
<< phx_2->base_utc_offset() << std::endl;
return 0;
}
/* Copyright 2001-2005: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+4
View File
@@ -1,3 +1,7 @@
# Copyright (c) 2002-2005 CrystalClear Software, Inc.
# Use, modification and distribution is subject to the
# Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
project
: requirements <library>../../build/boost_date_time
+22 -17
View File
@@ -1,20 +1,17 @@
//Demonstrate conversions between a local time and utc
/* Output:
UTC <--> New York while DST is NOT active (5 hours)
2001-Dec-31 19:00:00 in New York is 2002-Jan-01 00:00:00 UTC time
2002-Jan-01 00:00:00 UTC is 2001-Dec-31 19:00:00 New York time
UTC <--> New York while DST is active (4 hours)
2002-May-31 20:00:00 in New York is 2002-Jun-01 00:00:00 UTC time
2002-Jun-01 00:00:00 UTC is 2002-May-31 20:00:00 New York time
UTC <--> Arizona (7 hours)
2002-May-31 17:00:00 in Arizona is 2002-Jun-01 00:00:00 UTC time
*/
/* Demonstrate conversions between a local time and utc
* Output:
*
* UTC <--> New York while DST is NOT active (5 hours)
* 2001-Dec-31 19:00:00 in New York is 2002-Jan-01 00:00:00 UTC time
* 2002-Jan-01 00:00:00 UTC is 2001-Dec-31 19:00:00 New York time
*
* UTC <--> New York while DST is active (4 hours)
* 2002-May-31 20:00:00 in New York is 2002-Jun-01 00:00:00 UTC time
* 2002-Jun-01 00:00:00 UTC is 2002-May-31 20:00:00 New York time
*
* UTC <--> Arizona (7 hours)
* 2002-May-31 17:00:00 in Arizona is 2002-Jun-01 00:00:00 UTC time
*/
#include "boost/date_time/posix_time/posix_time.hpp"
#include "boost/date_time/local_time_adjustor.hpp"
@@ -83,3 +80,11 @@ main()
return 0;
}
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+29 -23
View File
@@ -1,26 +1,24 @@
//Print the remaining hours of the day
//Uses the clock to get the local time
//Use an iterator to iterate over the remaining hours
//Retrieve the date part from a time
/* Expected Output something like:
2002-Mar-08 16:30:59
2002-Mar-08 17:30:59
2002-Mar-08 18:30:59
2002-Mar-08 19:30:59
2002-Mar-08 20:30:59
2002-Mar-08 21:30:59
2002-Mar-08 22:30:59
2002-Mar-08 23:30:59
Time left till midnight: 07:29:01
*/
/* Print the remaining hours of the day
* Uses the clock to get the local time
* Use an iterator to iterate over the remaining hours
* Retrieve the date part from a time
*
* Expected Output something like:
*
* 2002-Mar-08 16:30:59
* 2002-Mar-08 17:30:59
* 2002-Mar-08 18:30:59
* 2002-Mar-08 19:30:59
* 2002-Mar-08 20:30:59
* 2002-Mar-08 21:30:59
* 2002-Mar-08 22:30:59
* 2002-Mar-08 23:30:59
* Time left till midnight: 07:29:01
*/
#include "boost/date_time/posix_time/posix_time.hpp"
#include <iostream>
int
main()
{
@@ -31,17 +29,25 @@ main()
ptime now = second_clock::local_time();
//Get the date part out of the time
date today = now.date();
date tommorrow = today + date_duration(1);
ptime tommorrow_start(tommorrow); //midnight
date tomorrow = today + days(1);
ptime tomorrow_start(tomorrow); //midnight
//iterator adds by one hour
time_iterator titr(now,hours(1));
for (; titr < tommorrow_start; ++titr) {
for (; titr < tomorrow_start; ++titr) {
std::cout << to_simple_string(*titr) << std::endl;
}
time_duration remaining = tommorrow_start - now;
time_duration remaining = tomorrow_start - now;
std::cout << "Time left till midnight: "
<< to_simple_string(remaining) << std::endl;
return 0;
}
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+14 -6
View File
@@ -1,6 +1,7 @@
//Some simple examples of constructing and calculating with times
//Output:
//2002-Feb-01 00:00:00 - 2002-Feb-01 05:04:02.001000000 = -5:04:02.001000000
/* Some simple examples of constructing and calculating with times
* Output:
* 2002-Feb-01 00:00:00 - 2002-Feb-01 05:04:02.001000000 = -5:04:02.001000000
*/
#include "boost/date_time/posix_time/posix_time.hpp"
#include <iostream>
@@ -12,10 +13,10 @@ main()
using namespace boost::gregorian;
date d(2002,Feb,1); //an arbitrary date
//construct a time by adding up some durations durations
ptime t1(d, hours(5)+minutes(4)+seconds(2)+millisec(1));
//construct a time by adding up some durations
ptime t1(d, hours(5)+minutes(4)+seconds(2)+milliseconds(1));
//construct a new time by subtracting some times
ptime t2 = t1 - hours(5)- minutes(4)- seconds(2)- millisec(1);
ptime t2 = t1 - hours(5)- minutes(4)- seconds(2)- milliseconds(1);
//construct a duration by taking the difference between times
time_duration td = t2 - t1;
@@ -26,3 +27,10 @@ main()
return 0;
}
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+15 -7
View File
@@ -1,10 +1,10 @@
//Some simple examples of constructing and calculating with times
//Returns:
//[2002-Feb-01 00:00:00/2002-Feb-01 23:59:59.999999999] contains 2002-Feb-01 03:00:05
//[2002-Feb-01 00:00:00/2002-Feb-01 23:59:59.999999999] intersected with
//[2002-Feb-01 00:00:00/2002-Feb-01 03:00:04.999999999] is
//[2002-Feb-01 00:00:00/2002-Feb-01 03:00:04.999999999]
/* Some simple examples of constructing and calculating with times
* Returns:
* [2002-Feb-01 00:00:00/2002-Feb-01 23:59:59.999999999] contains 2002-Feb-01 03:00:05
* [2002-Feb-01 00:00:00/2002-Feb-01 23:59:59.999999999] intersected with
* [2002-Feb-01 00:00:00/2002-Feb-01 03:00:04.999999999] is
* [2002-Feb-01 00:00:00/2002-Feb-01 03:00:04.999999999]
*/
#include "boost/date_time/posix_time/posix_time.hpp"
#include <iostream>
@@ -48,3 +48,11 @@ main()
return 0;
}
/* Copyright 2001-2004: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+194
View File
@@ -0,0 +1,194 @@
#include <iostream>
#include <boost/date_time/local_time/local_time.hpp>
int main(){
using namespace boost::gregorian;
using namespace boost::posix_time;
using namespace boost::local_time;
using namespace std;
/****** basic use ******/
date d(2004, Feb, 29);
time_duration td(12,34,56,789);
stringstream ss;
ss << d << ' ' << td;
ptime pt(not_a_date_time);
cout << pt << endl; // "not-a-date-time"
ss >> pt;
cout << pt << endl; // "2004-Feb-29 12:34:56.000789"
ss.str("");
ss << pt << " EDT-05EDT,M4.1.0,M10.5.0";
local_date_time ldt(not_a_date_time);
ss >> ldt;
cout << ldt << endl; // " 2004-Feb-29 12:34:56.000789 EDT"
/****** format strings ******/
local_time_facet* output_facet = new local_time_facet();
local_time_input_facet* input_facet = new local_time_input_facet();
ss.imbue(locale(locale::classic(), output_facet));
ss.imbue(locale(ss.getloc(), input_facet));
output_facet->format("%a %b %d, %H:%M %z");
ss.str("");
ss << ldt;
cout << ss.str() << endl; // "Sun Feb 29, 12:34 EDT"
output_facet->format(local_time_facet::iso_time_format_specifier);
ss.str("");
ss << ldt;
cout << ss.str() << endl; // "20040229T123456.000789-0500"
output_facet->format(local_time_facet::iso_time_format_extended_specifier);
ss.str("");
ss << ldt;
cout << ss.str() << endl; // "2004-02-29 12:34:56.000789-05:00"
// extra words in format
string my_format("The extended ordinal time %Y-%jT%H:%M can also be represented as %A %B %d, %Y");
output_facet->format(my_format.c_str());
input_facet->format(my_format.c_str());
ss.str("");
ss << ldt;
cout << ss.str() << endl;
// matching extra words in input
ss.str("The extended ordinal time 2005-128T12:15 can also be represented as Sunday May 08, 2005");
ss >> ldt;
cout << ldt << endl; // cout is using default format "2005-May-08 12:15:00 UTC"
/****** content strings ******/
// set up the collections of custom strings.
// only the full names are altered for the sake of brevity
string month_names[12] = { "january", "february", "march",
"april", "may", "june",
"july", "august", "september",
"october", "november", "december" };
vector<string> long_months(&month_names[0], &month_names[12]);
string day_names[7] = { "sunday", "monday", "tuesday", "wednesday",
"thursday", "friday", "saturday" };
vector<string> long_days(&day_names[0], &day_names[7]);
// create date_facet and date_input_facet using all defaults
date_facet* date_output = new date_facet();
date_input_facet* date_input = new date_input_facet();
ss.imbue(locale(ss.getloc(), date_output));
ss.imbue(locale(ss.getloc(), date_input));
// replace names in the output facet
date_output->long_month_names(long_months);
date_output->long_weekday_names(long_days);
// replace names in the input facet
date_input->long_month_names(long_months);
date_input->long_weekday_names(long_days);
// customize month, weekday and date formats
date_output->format("%Y-%B-%d");
date_input->format("%Y-%B-%d");
date_output->month_format("%B"); // full name
date_input->month_format("%B"); // full name
date_output->weekday_format("%A"); // full name
date_input->weekday_format("%A"); // full name
ss.str("");
ss << greg_month(3);
cout << ss.str() << endl; // "march"
ss.str("");
ss << greg_weekday(3);
cout << ss.str() << endl; // "tuesday"
ss.str("");
ss << date(2005,Jul,4);
cout << ss.str() << endl; // "2005-july-04"
/****** special values ******/
// reset the formats to defaults
output_facet->format(local_time_facet::default_time_format);
input_facet->format(local_time_input_facet::default_time_input_format);
// create custom special_values parser and formatter objects
// and add them to the facets
string sv[5] = {"nadt","neg_inf", "pos_inf", "min_dt", "max_dt" };
vector<string> sv_names(&sv[0], &sv[5]);
special_values_parser sv_parser(sv_names.begin(), sv_names.end());
special_values_formatter sv_formatter(sv_names.begin(), sv_names.end());
output_facet->special_values_formatter(sv_formatter);
input_facet->special_values_parser(sv_parser);
ss.str("");
ldt = local_date_time(not_a_date_time);
ss << ldt;
cout << ss.str() << endl; // "nadt"
ss.str("min_dt");
ss >> ldt;
ss.str("");
ss << ldt;
cout << ss.str() << endl; // "1400-Jan-01 00:00:00 UTC"
/****** date/time periods ******/
// reset all formats to defaults
date_output->format(date_facet::default_date_format);
date_input->format(date_facet::default_date_format);
date_output->month_format("%b"); // abbrev
date_input->month_format("%b"); // abbrev
date_output->weekday_format("%a"); // abbrev
date_input->weekday_format("%a"); // abbrev
// create our date_period
date_period dp(date(2005,Mar,1), days(31)); // month of march
// custom period formatter and parser
period_formatter per_formatter(period_formatter::AS_OPEN_RANGE,
" to ", "from ", " exclusive", " inclusive" );
period_parser per_parser(period_parser::AS_OPEN_RANGE,
" to ", "from ", " exclusive" , " inclusive" );
// default output
ss.str("");
ss << dp;
cout << ss.str() << endl; // "[2005-Mar-01/2005-Mar-31]"
// add out custom parser and formatter to the facets
date_output->period_formatter(per_formatter);
date_input->period_parser(per_parser);
// custom output
ss.str("");
ss << dp;
cout << ss.str() << endl; // "from 2005-Feb-01 to 2005-Apr-01 exclusive"
/****** date generators ******/
// custom date_generator phrases
string dg_phrases[9] = { "1st", "2nd", "3rd", "4th", "5th",
"final", "prior to", "following", "in" };
vector<string> phrases(&dg_phrases[0], &dg_phrases[9]);
// create our date_generator
first_day_of_the_week_before d_gen(Monday);
// default output
ss.str("");
ss << d_gen;
cout << ss.str() << endl; // "Mon before"
// add our custom strings to the date facets
date_output->date_gen_phrase_strings(phrases);
date_input->date_gen_element_strings(phrases);
// custom output
ss.str("");
ss << d_gen;
cout << ss.str() << endl; // "Mon prior to"
return 0;
}
/* Copyright 2005: CrystalClear Software, Inc
* http://www.crystalclearsoftware.com
*
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
*/
+17
View File
@@ -0,0 +1,17 @@
#ifndef BOOST_DATE_TIME_ALL_HPP___
#define BOOST_DATE_TIME_ALL_HPP___
/* Copyright (c) 2006 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland
* $Date$
*/
// See www.boost.org/libs/date_time for documentation.
//gregorian and posix time included by indirectly
#include "boost/date_time/local_time/local_time.hpp"
#endif // BOOST_DATE_TIME_ALL_HPP___
+67 -38
View File
@@ -1,8 +1,12 @@
#ifndef _DATE_TIME_ADJUST_FUNCTORS_HPP___
#define _DATE_TIME_ADJUST_FUNCTORS_HPP___
/* Copyright (c) 2001 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include "boost/date_time/date.hpp"
@@ -10,19 +14,23 @@
namespace boost {
namespace date_time {
//! Functor to iterate a fixed number of days
template<class date_type>
class day_functor
class day_functor
{
public:
typedef typename date_type::duration_type duration_type;
day_functor(int f) : f_(f) {}
duration_type get_offset(const date_type& d) const
duration_type get_offset(const date_type&) const
{
return duration_type(f_);
}
duration_type get_neg_offset(const date_type&) const
{
return duration_type(-f_);
}
private:
int f_;
};
@@ -30,7 +38,7 @@ namespace date_time {
//! Provides calculation to find next nth month given a date
/*! This adjustment function provides the logic for 'month-based'
* advancement on a ymd based calendar. The policy it uses
* advancement on a ymd based calendar. The policy it uses
* to handle the non existant end of month days is to back
* up to the last day of the month. Also, if the starting
* date is the last day of a month, this functor will attempt
@@ -38,7 +46,7 @@ namespace date_time {
*/
template<class date_type>
class month_functor
class month_functor
{
public:
typedef typename date_type::duration_type duration_type;
@@ -47,7 +55,7 @@ namespace date_time {
typedef typename cal_type::day_type day_type;
month_functor(int f) : f_(f), origDayOfMonth_(0) {}
duration_type get_offset(const date_type& d) const
duration_type get_offset(const date_type& d) const
{
ymd_type ymd(d.year_month_day());
if (origDayOfMonth_ == 0) {
@@ -57,9 +65,10 @@ namespace date_time {
origDayOfMonth_ = -1; //force the value to the end of month
}
}
date_time::wrapping_int2<short,1,12> wi(ymd.month);
unsigned long year = wi.add(f_); //calc the year wrap around
year += ymd.year; //now add in the current year
typedef date_time::wrapping_int2<short,1,12> wrap_int2;
wrap_int2 wi(ymd.month);
//calc the year wrap around, add() returns 0 or 1 if wrapped
const typename ymd_type::year_type year(static_cast<typename ymd_type::year_type::value_type>(ymd.year + wi.add(f_)));
// std::cout << "trace wi: " << wi.as_int() << std::endl;
// std::cout << "trace year: " << year << std::endl;
//find the last day for the new month
@@ -74,6 +83,33 @@ namespace date_time {
}
return date_type(year, wi.as_int(), dayOfMonth) - d;
}
//! Returns a negative duration_type
duration_type get_neg_offset(const date_type& d) const
{
ymd_type ymd(d.year_month_day());
if (origDayOfMonth_ == 0) {
origDayOfMonth_ = ymd.day;
day_type endOfMonthDay(cal_type::end_of_month_day(ymd.year,ymd.month));
if (endOfMonthDay == ymd.day) {
origDayOfMonth_ = -1; //force the value to the end of month
}
}
typedef date_time::wrapping_int2<short,1,12> wrap_int2;
wrap_int2 wi(ymd.month);
//calc the year wrap around, add() returns 0 or 1 if wrapped
const typename ymd_type::year_type year(static_cast<typename ymd_type::year_type::value_type>(ymd.year + wi.subtract(f_)));
//find the last day for the new month
day_type resultingEndOfMonthDay(cal_type::end_of_month_day(year, wi.as_int()));
//original was the end of month -- force to last day of month
if (origDayOfMonth_ == -1) {
return date_type(year, wi.as_int(), resultingEndOfMonthDay) - d;
}
day_type dayOfMonth = origDayOfMonth_;
if (dayOfMonth > resultingEndOfMonthDay) {
dayOfMonth = resultingEndOfMonthDay;
}
return date_type(year, wi.as_int(), dayOfMonth) - d;
}
private:
int f_;
mutable short origDayOfMonth_;
@@ -82,54 +118,47 @@ namespace date_time {
//! Functor to iterate a over weeks
template<class date_type>
class week_functor
class week_functor
{
public:
typedef typename date_type::duration_type duration_type;
typedef typename date_type::calendar_type calendar_type;
week_functor(int f) : f_(f) {}
duration_type get_offset(const date_type& d) const
duration_type get_offset(const date_type&) const
{
return duration_type(f_*calendar_type::days_in_week());
return duration_type(f_*static_cast<int>(calendar_type::days_in_week()));
}
duration_type get_neg_offset(const date_type&) const
{
return duration_type(-f_*static_cast<int>(calendar_type::days_in_week()));
}
private:
int f_;
};
//! Functor to iterate by a year adjusting for leap years
/*!
*@throws bad_day if date value is invalid (eg: feb 29)
*/
template<class date_type>
class year_functor
class year_functor
{
public:
typedef typename date_type::year_type year_type;
//typedef typename date_type::year_type year_type;
typedef typename date_type::duration_type duration_type;
year_functor(int f) : f_(f) {}
duration_type get_offset(const date_type& d) const
year_functor(int f) : _mf(f * 12) {}
duration_type get_offset(const date_type& d) const
{
date_type new_date(d.year()+f_, d.month(), d.day());
return new_date-d;
return _mf.get_offset(d);
}
duration_type get_neg_offset(const date_type& d) const
{
return _mf.get_neg_offset(d);
}
private:
int f_;
month_functor<date_type> _mf;
};
} }//namespace date_time
/* Copyright (c) 2001
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
#endif
@@ -1,9 +1,12 @@
#ifndef DATE_TIME_C_LOCAL_TIME_ADJUSTOR_HPP__
#define DATE_TIME_C_LOCAL_TIME_ADJUSTOR_HPP__
/* Copyright (c) 2002 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
/*! @file c_local_time_adjustor.hpp
@@ -11,7 +14,10 @@
*/
#include <stdexcept>
#include "boost/date_time/c_time.hpp"
#include <boost/throw_exception.hpp>
#include <boost/date_time/compiler_config.hpp>
#include <boost/date_time/c_time.hpp>
#include <boost/numeric/conversion/cast.hpp>
namespace boost {
namespace date_time {
@@ -21,8 +27,7 @@ namespace date_time {
* machine are correct. This can be a very dangerous assumption.
*/
template<class time_type>
class c_local_adjustor
{
class c_local_adjustor {
public:
typedef typename time_type::time_duration_type time_duration_type;
typedef typename time_type::date_type date_type;
@@ -33,20 +38,27 @@ namespace date_time {
date_type time_t_start_day(1970,1,1);
time_type time_t_start_time(time_t_start_day,time_duration_type(0,0,0));
if (t < time_t_start_time) {
throw std::out_of_range("Cannot convert dates prior to Jan 1, 1970");
boost::throw_exception(std::out_of_range("Cannot convert dates prior to Jan 1, 1970"));
BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(return time_t_start_time); // should never reach
}
date_duration_type dd = t.date() - time_t_start_day;
time_duration_type td = t.time_of_day();
std::time_t t2 = dd.days()*86400 + td.hours()*3600 + td.minutes()*60 + td.seconds();
std::tm* tms = std::localtime(&t2);
date_type d(tms->tm_year + 1900,
tms->tm_mon + 1,
tms->tm_mday);
time_duration_type td2(tms->tm_hour,
tms->tm_min,
tms->tm_sec,
uint64_t t2 = static_cast<uint64_t>(dd.days())*86400 +
static_cast<uint64_t>(td.hours())*3600 +
static_cast<uint64_t>(td.minutes())*60 +
td.seconds();
// detect y2038 issue and throw instead of proceed with bad time
std::time_t tv = boost::numeric_cast<std::time_t>(t2);
std::tm tms, *tms_ptr;
tms_ptr = c_time::localtime(&tv, &tms);
date_type d(static_cast<unsigned short>(tms_ptr->tm_year + 1900),
static_cast<unsigned short>(tms_ptr->tm_mon + 1),
static_cast<unsigned short>(tms_ptr->tm_mday));
time_duration_type td2(tms_ptr->tm_hour,
tms_ptr->tm_min,
tms_ptr->tm_sec,
t.time_of_day().fractional_seconds());
return time_type(d,td2);
}
};
@@ -56,17 +68,5 @@ namespace date_time {
} } //namespace date_time
/* Copyright (c) 2002
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*
*/
#endif
+108 -19
View File
@@ -1,39 +1,128 @@
#ifndef DATE_TIME_C_TIME_HPP___
#define DATE_TIME_C_TIME_HPP___
/* Copyright (c) 2002 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
/*! @file c_time.hpp
Provide workarounds related to the ctime header
*/
#include "boost/date_time/compiler_config.hpp"
#include <ctime>
//Work around libraries that don't put time_t and time in namespace std
#include <string> // to be able to convert from string literals to exceptions
#include <stdexcept>
#include <boost/throw_exception.hpp>
#include <boost/date_time/compiler_config.hpp>
//Work around libraries that don't put time_t and time in namespace std
#ifdef BOOST_NO_STDC_NAMESPACE
namespace std { using ::time_t; using ::time; using ::localtime;
using ::tm; using ::gmtime; }
#endif
#endif // BOOST_NO_STDC_NAMESPACE
//The following is used to support high precision time clocks
#ifdef BOOST_HAS_GETTIMEOFDAY
#include <sys/time.h>
#endif
/* Copyright (c) 2002
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
#ifdef BOOST_HAS_FTIME
#include <time.h>
#endif
namespace boost {
namespace date_time {
//! Provides a uniform interface to some 'ctime' functions
/*! Provides a uniform interface to some ctime functions and
* their '_r' counterparts. The '_r' functions require a pointer to a
* user created std::tm struct whereas the regular functions use a
* staticly created struct and return a pointer to that. These wrapper
* functions require the user to create a std::tm struct and send in a
* pointer to it. This struct may be used to store the resulting time.
* The returned pointer may or may not point to this struct, however,
* it will point to the result of the corresponding function.
* All functions do proper checking of the C function results and throw
* exceptions on error. Therefore the functions will never return NULL.
*/
struct c_time {
public:
#if defined(BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS)
//! requires a pointer to a user created std::tm struct
inline
static std::tm* localtime(const std::time_t* t, std::tm* result)
{
// localtime_r() not in namespace std???
#if defined(__VMS) && __INITIAL_POINTER_SIZE == 64
std::tm tmp;
if(!localtime_r(t,&tmp))
result = 0;
else
*result = tmp;
#else
result = localtime_r(t, result);
#endif
if (!result)
boost::throw_exception(std::runtime_error("could not convert calendar time to local time"));
return result;
}
//! requires a pointer to a user created std::tm struct
inline
static std::tm* gmtime(const std::time_t* t, std::tm* result)
{
// gmtime_r() not in namespace std???
#if defined(__VMS) && __INITIAL_POINTER_SIZE == 64
std::tm tmp;
if(!gmtime_r(t,&tmp))
result = 0;
else
*result = tmp;
#else
result = gmtime_r(t, result);
#endif
if (!result)
boost::throw_exception(std::runtime_error("could not convert calendar time to UTC time"));
return result;
}
#else // BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS
#if defined(__clang__) // Clang has to be checked before MSVC
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#elif (defined(_MSC_VER) && (_MSC_VER >= 1400))
#pragma warning(push) // preserve warning settings
#pragma warning(disable : 4996) // disable depricated localtime/gmtime warning on vc8
#endif
//! requires a pointer to a user created std::tm struct
inline
static std::tm* localtime(const std::time_t* t, std::tm* result)
{
result = std::localtime(t);
if (!result)
boost::throw_exception(std::runtime_error("could not convert calendar time to local time"));
return result;
}
//! requires a pointer to a user created std::tm struct
inline
static std::tm* gmtime(const std::time_t* t, std::tm* result)
{
result = std::gmtime(t);
if (!result)
boost::throw_exception(std::runtime_error("could not convert calendar time to UTC time"));
return result;
}
#if defined(__clang__) // Clang has to be checked before MSVC
#pragma clang diagnostic pop
#elif (defined(_MSC_VER) && (_MSC_VER >= 1400))
#pragma warning(pop) // restore warnings to previous state
#endif
#endif // BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS
};
}} // namespaces
#endif // DATE_TIME_C_TIME_HPP___
+116 -20
View File
@@ -1,41 +1,137 @@
#ifndef DATE_TIME_COMPILER_CONFIG_HPP___
#define DATE_TIME_COMPILER_CONFIG_HPP___
/* Copyright (c) 2002 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
* Subject to the Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include <cstdlib>
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
// This file performs some local compiler configurations
#include "boost/date_time/locale_config.hpp" //set up locale configurations
#include <boost/date_time/locale_config.hpp> //set up locale configurations
//Set up a configuration parameter for platforms that have
//GetTimeOfDay
#ifdef BOOST_HAS_GETTIMEOFDAY
#define BOOST_DATE_TIME_HAS_GETTIMEOFDAY_HIGH_PRECISION_CLOCK
#if defined(BOOST_HAS_GETTIMEOFDAY) || defined(BOOST_HAS_FTIME)
#define BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK
#endif
// To Force no default constructors for date & ptime, un-comment following
//#define DATE_TIME_NO_DEFAULT_CONSTRUCTOR
#if (defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) || (defined(__BORLANDC__)))
// Include extensions to date_duration - comment out to remove this feature
#define BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES
#if (defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) || BOOST_WORKAROUND( BOOST_BORLANDC, BOOST_TESTED_AT(0x581) ) )
#define BOOST_DATE_TIME_NO_MEMBER_INIT
#endif
//Define INT64_C for some Metrowerks compilers
#if (defined(__MWERKS__) && (!defined(INT64_C)))
#define INT64_C(value) long long(value)
// include these types before we try to re-define them
#include <boost/cstdint.hpp>
//Define INT64_C for compilers that don't have it
#if (!defined(INT64_C))
#define INT64_C(value) int64_t(value)
#endif
/* Copyright (c) 2002
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
/* Workaround for Borland iterator error. Error was "Cannot convert 'istream *' to 'wistream *' in function istream_iterator<>::istream_iterator() */
#if defined(BOOST_BORLANDC) && defined(BOOST_BCB_WITH_RW_LIB)
#define BOOST_DATE_TIME_NO_WISTREAM_ITERATOR
#endif
// Borland v5.64 does not have the following in std namespace; v5.5.1 does
#if defined(BOOST_BORLANDC) && defined(BOOST_BCB_WITH_STLPORT)
#include <locale>
namespace std {
using stlport::tolower;
using stlport::ctype;
using stlport::use_facet;
}
#endif
// workaround for errors associated with output for date classes
// modifications and input streaming for time classes.
// Compilers affected are:
// gcc295, msvc (neither with STLPort), any borland
//
#if (((defined(__GNUC__) && (__GNUC__ < 3)) || \
(defined(_MSC_VER) && (_MSC_VER < 1300)) ) && \
!defined(_STLP_OWN_IOSTREAMS) ) || \
BOOST_WORKAROUND( BOOST_BORLANDC, BOOST_TESTED_AT(0x581) )
#define BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS
#endif
// The macro marks up places where compiler complains for missing return statement or
// uninitialized variables after calling to boost::throw_exception.
// BOOST_UNREACHABLE_RETURN doesn't work since even compilers that support
// unreachable statements detection emit such warnings.
#if defined(_MSC_VER)
// Use special MSVC extension to markup unreachable code
# define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) __assume(false)
#elif !defined(BOOST_NO_UNREACHABLE_RETURN_DETECTION)
// Call to a non-returning function should suppress the warning
# if defined(BOOST_NO_STDC_NAMESPACE)
namespace std {
using ::abort;
}
# endif // defined(BOOST_NO_STDC_NAMESPACE)
# define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) std::abort()
#else
// For other poor compilers the specified expression is compiled. Usually, this would be a return statement.
# define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) x
#endif
/* The following handles the definition of the necessary macros
* for dll building on Win32 platforms.
*
* For code that will be placed in the date_time .dll,
* it must be properly prefixed with BOOST_DATE_TIME_DECL.
* The corresponding .cpp file must have BOOST_DATE_TIME_SOURCE
* defined before including its header. For examples see:
* greg_month.hpp & greg_month.cpp
*
*/
// we need to import/export our code only if the user has specifically
// asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
// libraries to be dynamically linked, or BOOST_DATE_TIME_DYN_LINK
// if they want just this one to be dynamically liked:
#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_DATE_TIME_DYN_LINK)
// export if this is our own source, otherwise import:
# ifdef BOOST_DATE_TIME_SOURCE
# define BOOST_DATE_TIME_DECL BOOST_SYMBOL_EXPORT
# else
# define BOOST_DATE_TIME_DECL BOOST_SYMBOL_IMPORT
# endif // BOOST_DATE_TIME_SOURCE
#endif // DYN_LINK
//
// if BOOST_WHATEVER_DECL isn't defined yet define it now:
#ifndef BOOST_DATE_TIME_DECL
# define BOOST_DATE_TIME_DECL
#endif
#if defined(BOOST_HAS_THREADS)
# if defined(_MSC_VER) || defined(__MWERKS__) || defined(__MINGW32__) || defined(__BORLANDC__)
//no reentrant posix functions (eg: localtime_r)
# elif (!defined(__hpux) || (defined(__hpux) && defined(_REENTRANT)))
# define BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS
# endif
#endif
#if defined(BOOST_NO_CXX11_NULLPTR)
# define BOOST_DATE_TIME_NULLPTR 0
#else
# define BOOST_DATE_TIME_NULLPTR nullptr
#endif
#endif
+56 -30
View File
@@ -1,11 +1,21 @@
#ifndef CONSTRAINED_VALUE_HPP___
#define CONSTRAINED_VALUE_HPP___
/* Copyright (c) 2000 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland
* $Date$
*/
#include <exception>
#include <stdexcept>
#include <boost/config.hpp>
#include <boost/throw_exception.hpp>
#include <boost/type_traits/conditional.hpp>
#include <boost/type_traits/is_base_of.hpp>
namespace boost {
//! Namespace containing constrained_value template and types
@@ -29,57 +39,83 @@ namespace CV {
*
*/
template<class value_policies>
class constrained_value {
class BOOST_SYMBOL_VISIBLE constrained_value {
public:
typedef typename value_policies::value_type value_type;
// typedef except_type exception_type;
constrained_value(value_type value)
BOOST_CXX14_CONSTEXPR constrained_value(value_type value) : value_((min)())
{
assign(value);
};
constrained_value& operator=(value_type v)
{
}
BOOST_CXX14_CONSTEXPR constrained_value& operator=(value_type v)
{
assign(v);
return *this;
}
}
//! Return the max allowed value (traits method)
static value_type max() {return value_policies::max();};
static BOOST_CONSTEXPR value_type
max BOOST_PREVENT_MACRO_SUBSTITUTION () {return (value_policies::max)();}
//! Return the min allowed value (traits method)
static value_type min() {return value_policies::min();};
static BOOST_CONSTEXPR value_type
min BOOST_PREVENT_MACRO_SUBSTITUTION () {return (value_policies::min)();}
//! Coerce into the representation type
operator value_type() const {return value_;};
BOOST_CXX14_CONSTEXPR operator value_type() const {return value_;}
protected:
value_type value_;
private:
void assign(value_type value)
BOOST_CXX14_CONSTEXPR void assign(value_type value)
{
//adding 1 below gets rid of a compiler warning which occurs when the
//min_value is 0 and the type is unsigned....
if (value+1 < min()+1) {
if (value+1 < (min)()+1) {
value_policies::on_error(value_, value, min_violation);
return;
}
if (value > max()) {
if (value > (max)()) {
value_policies::on_error(value_, value, max_violation);
return;
}
value_ = value;
}
};
//! Template to shortcut the constrained_value policy creation process
template<typename rep_type, rep_type min_value,
rep_type max_value, class exception_type>
class simple_exception_policy
class BOOST_SYMBOL_VISIBLE simple_exception_policy
{
struct BOOST_SYMBOL_VISIBLE exception_wrapper : public exception_type
{
// In order to support throw_exception mechanism in the BOOST_NO_EXCEPTIONS mode,
// we'll have to provide a way to acquire std::exception from the exception being thrown.
// However, we cannot derive from it, since it would make it interceptable by this class,
// which might not be what the user wanted.
operator std::out_of_range () const
{
// TODO: Make the message more descriptive by using arguments to on_error
return std::out_of_range("constrained value boundary has been violated");
}
};
typedef typename conditional<
is_base_of< std::exception, exception_type >::value,
exception_type,
exception_wrapper
>::type actual_exception_type;
public:
typedef rep_type value_type;
static rep_type min() { return min_value; };
static rep_type max() { return max_value;};
static BOOST_CONSTEXPR rep_type
min BOOST_PREVENT_MACRO_SUBSTITUTION () { return min_value; }
static BOOST_CONSTEXPR rep_type
max BOOST_PREVENT_MACRO_SUBSTITUTION () { return max_value; }
static void on_error(rep_type, rep_type, violation_enum)
{
throw exception_type();
boost::throw_exception(actual_exception_type());
}
};
@@ -88,16 +124,6 @@ namespace CV {
} } //namespace CV
/* Copyright (c) 2000-2002
* CrystalClear Software, Inc.
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
#endif
+97 -66
View File
@@ -1,40 +1,45 @@
#ifndef DATE_TIME_DATE_HPP___
#define DATE_TIME_DATE_HPP___
/* Copyright (c) 2000 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include "boost/date_time/year_month_day.hpp"
#include "boost/date_time/special_defs.hpp"
#include "boost/operators.hpp"
#include <boost/operators.hpp>
#include <boost/date_time/compiler_config.hpp>
#include <boost/date_time/year_month_day.hpp>
#include <boost/date_time/special_defs.hpp>
namespace boost {
namespace date_time {
//!Representation of timepoint at the one day level resolution.
/*!
/*!
The date template represents an interface shell for a date class
that is based on a year-month-day system such as the gregorian
or iso systems. It provides basic operations to enable calculation
and comparisons.
or ISO 8601 systems. It provides basic operations to enable calculation
and comparisons.
<b>Theory</b>
This date representation fundamentally departs from the C tm struct
This date representation fundamentally departs from the C tm struct
approach. The goal for this type is to provide efficient date
operations (add, subtract) and storage (minimize space to represent)
in a concrete class. Thus, the date uses a count internally to
represent a particular date. The calendar parameter defines
represent a particular date. The calendar parameter defines
the policies for converting the the year-month-day and internal
counted form here. Applications that need to perform heavy
formatting of the same date repeatedly will perform better
by using the year-month-day representation.
Internally the date uses a day number to represent the date.
This is a monotonic time representation. This representation
This is a monotonic time representation. This representation
allows for fast comparison as well as simplifying
the creation of writing numeric operations. Essentially, the
the creation of writing numeric operations. Essentially, the
internal day number is like adjusted julian day. The adjustment
is determined by the Epoch date which is represented as day 1 of
the calendar. Day 0 is reserved for negative infinity so that
@@ -44,11 +49,11 @@ namespace date_time {
day representations.
*/
template<class T, class calendar, class duration_type_>
class date : private
boost::less_than_comparable<T
, boost::equality_comparable<T
template<class T, class calendar, class duration_type_>
class BOOST_SYMBOL_VISIBLE date : private
boost::less_than_comparable<T
, boost::equality_comparable<T
> >
{
public:
@@ -63,115 +68,141 @@ namespace date_time {
typedef typename calendar::date_rep_type date_rep_type;
typedef typename calendar::date_int_type date_int_type;
typedef typename calendar::day_of_week_type day_of_week_type;
date(year_type year, month_type month, day_type day)
: days_(calendar::day_number(ymd_type(year, month, day)))
BOOST_CXX14_CONSTEXPR date(year_type y, month_type m, day_type d)
: days_(calendar::day_number(ymd_type(y, m, d)))
{}
date(const ymd_type& ymd)
BOOST_CXX14_CONSTEXPR date(const ymd_type& ymd)
: days_(calendar::day_number(ymd))
{}
{}
//let the compiler write copy, assignment, and destructor
year_type year() const
BOOST_CXX14_CONSTEXPR year_type year() const
{
ymd_type ymd = calendar::from_day_number(days_);
ymd_type ymd = calendar::from_day_number(days_);
return ymd.year;
}
month_type month() const
BOOST_CXX14_CONSTEXPR month_type month() const
{
ymd_type ymd = calendar::from_day_number(days_);
ymd_type ymd = calendar::from_day_number(days_);
return ymd.month;
}
day_type day() const
BOOST_CXX14_CONSTEXPR day_type day() const
{
ymd_type ymd = calendar::from_day_number(days_);
ymd_type ymd = calendar::from_day_number(days_);
return ymd.day;
}
day_of_week_type day_of_week() const
BOOST_CXX14_CONSTEXPR day_of_week_type day_of_week() const
{
ymd_type ymd = calendar::from_day_number(days_);
return calendar::day_of_week(ymd);
}
ymd_type year_month_day() const
BOOST_CXX14_CONSTEXPR ymd_type year_month_day() const
{
return calendar::from_day_number(days_);
}
bool operator<(const date_type& rhs) const
BOOST_CONSTEXPR bool operator<(const date_type& rhs) const
{
return days_ < rhs.days_;
}
bool operator==(const date_type& rhs) const
BOOST_CONSTEXPR bool operator==(const date_type& rhs) const
{
return days_ == rhs.days_;
}
//! check to see if date is a special value
BOOST_CONSTEXPR bool is_special()const
{
return(is_not_a_date() || is_infinity());
}
//! check to see if date is not a value
bool is_not_a_date() const
BOOST_CONSTEXPR bool is_not_a_date() const
{
return traits_type::is_not_a_number(days_);
}
//! check to see if date is one of the infinity values
bool is_infinity() const
BOOST_CONSTEXPR bool is_infinity() const
{
return traits_type::is_inf(days_);
}
//! check to see if date is greater than all possible dates
bool is_pos_infinity() const
BOOST_CONSTEXPR bool is_pos_infinity() const
{
return traits_type::is_pos_infinity(days_);
return traits_type::is_pos_inf(days_);
}
//! check to see if date is greater than all possible dates
bool is_neg_infinity() const
BOOST_CONSTEXPR bool is_neg_infinity() const
{
return traits_type::is_neg_infinity(days_);
return traits_type::is_neg_inf(days_);
}
//! return as a special value or a not_special if a normal date
special_values as_special() const
BOOST_CXX14_CONSTEXPR special_values as_special() const
{
return traits_type::to_special(days_);
}
duration_type operator-(const date_type& d) const
BOOST_CXX14_CONSTEXPR duration_type operator-(const date_type& d) const
{
date_rep_type val = date_rep_type(days_) - date_rep_type(d.days_);
return duration_type(val.as_number());
if (!this->is_special() && !d.is_special())
{
// The duration underlying type may be wider than the date underlying type.
// Thus we calculate the difference in terms of two durations from some common fixed base date.
typedef typename duration_type::duration_rep_type duration_rep_type;
return duration_type(static_cast< duration_rep_type >(days_) - static_cast< duration_rep_type >(d.days_));
}
else
{
// In this case the difference will be a special value, too
date_rep_type val = date_rep_type(days_) - date_rep_type(d.days_);
return duration_type(val.as_special());
}
}
date_type operator-(const duration_type& dd) const
BOOST_CXX14_CONSTEXPR date_type operator-(const duration_type& dd) const
{
return date_type(date_rep_type(days_) - dd.days());
if(dd.is_special())
{
return date_type(date_rep_type(days_) - dd.get_rep());
}
return date_type(date_rep_type(days_) - static_cast<date_int_type>(dd.days()));
}
BOOST_CXX14_CONSTEXPR date_type operator-=(const duration_type& dd)
{
*this = *this - dd;
return date_type(days_);
}
BOOST_CONSTEXPR date_rep_type day_count() const
{
return days_;
}
date_rep_type day_count() const {return days_;};
//allow internal access from operators
date_type operator+(const duration_type& dd) const
BOOST_CXX14_CONSTEXPR date_type operator+(const duration_type& dd) const
{
return date_type(date_rep_type(days_) + dd.days());
if(dd.is_special())
{
return date_type(date_rep_type(days_) + dd.get_rep());
}
return date_type(date_rep_type(days_) + static_cast<date_int_type>(dd.days()));
}
BOOST_CXX14_CONSTEXPR date_type operator+=(const duration_type& dd)
{
*this = *this + dd;
return date_type(days_);
}
//see reference
protected:
/*! This is a private constructor which allows for the creation of new
dates. It is not exposed to users since that would require class
/*! This is a private constructor which allows for the creation of new
dates. It is not exposed to users since that would require class
users to understand the inner workings of the date class.
*/
date(date_int_type days) : days_(days) {};
date(date_rep_type days) : days_(days.as_number()) {};
BOOST_CONSTEXPR explicit date(date_int_type days) : days_(days) {}
BOOST_CXX14_CONSTEXPR explicit date(date_rep_type days) : days_(days.as_number()) {}
date_int_type days_;
};
} } // namespace date_time
/* Copyright (c) 2000
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
+22 -28
View File
@@ -1,9 +1,12 @@
#ifndef DATE_CLOCK_DEVICE_HPP___
#define DATE_CLOCK_DEVICE_HPP___
/* Copyright (c) 2002 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include "boost/date_time/c_time.hpp"
@@ -13,7 +16,7 @@ namespace boost {
namespace date_time {
//! A clock providing day level services based on C time_t capabilities
/*! This clock uses Posix interfaces as its implemenation and hence
/*! This clock uses Posix interfaces as its implementation and hence
* uses the timezone settings of the operating system. Incorrect
* user settings will result in incorrect results for the calls
* to local_day.
@@ -31,18 +34,20 @@ namespace date_time {
//! Get the local day as a ymd_type
static typename date_type::ymd_type local_day_ymd()
{
::std::tm* curr = get_local_time();
return ymd_type(curr->tm_year + 1900,
curr->tm_mon + 1,
curr->tm_mday);
::std::tm result;
::std::tm* curr = get_local_time(result);
return ymd_type(static_cast<unsigned short>(curr->tm_year + 1900),
static_cast<unsigned short>(curr->tm_mon + 1),
static_cast<unsigned short>(curr->tm_mday));
}
//! Get the current day in universal date as a ymd_type
static typename date_type::ymd_type universal_day_ymd()
{
::std::tm* curr = get_universal_time();
return ymd_type(curr->tm_year + 1900,
curr->tm_mon + 1,
curr->tm_mday);
::std::tm result;
::std::tm* curr = get_universal_time(result);
return ymd_type(static_cast<unsigned short>(curr->tm_year + 1900),
static_cast<unsigned short>(curr->tm_mon + 1),
static_cast<unsigned short>(curr->tm_mday));
}
//! Get the UTC day as a date type
static date_type universal_day()
@@ -51,33 +56,22 @@ namespace date_time {
}
private:
static ::std::tm* get_local_time()
static ::std::tm* get_local_time(std::tm& result)
{
::std::time_t t;
::std::time(&t);
return ::std::localtime(&t);
return c_time::localtime(&t, &result);
}
static ::std::tm* get_universal_time()
static ::std::tm* get_universal_time(std::tm& result)
{
::std::time_t t;
::std::time(&t);
return ::std::gmtime(&t);
return c_time::gmtime(&t, &result);
}
};
} } //namespace date_time
/* Copyright (c) 2002
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
#endif
+5 -15
View File
@@ -1,10 +1,12 @@
#ifndef DATE_TIME_DATE_DEFS_HPP
#define DATE_TIME_DATE_DEFS_HPP
/* Copyright (c) 2002 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland
* $Date$
*/
@@ -19,18 +21,6 @@ namespace date_time {
} } //namespace date_time
/* Copyright (c) 2000,2002
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*
*/
#endif
+108 -39
View File
@@ -1,77 +1,146 @@
#ifndef DATE_TIME_DATE_DURATION__
#define DATE_TIME_DATE_DURATION__
/* Copyright (c) 2000 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include <boost/operators.hpp>
#include <boost/date_time/special_defs.hpp>
#include <boost/date_time/compiler_config.hpp>
#include <boost/date_time/int_adapter.hpp>
namespace boost {
namespace date_time {
//! Duration type with date level resolution
template<class duration_rep>
class date_duration : private
boost::less_than_comparable<date_duration< duration_rep>
, boost::equality_comparable< date_duration< duration_rep>
> >
template<class duration_rep_traits>
class BOOST_SYMBOL_VISIBLE date_duration : private
boost::less_than_comparable1< date_duration< duration_rep_traits >
, boost::equality_comparable1< date_duration< duration_rep_traits >
, boost::addable1< date_duration< duration_rep_traits >
, boost::subtractable1< date_duration< duration_rep_traits >
, boost::dividable2< date_duration< duration_rep_traits >, int
> > > > >
{
public:
typedef typename duration_rep_traits::int_type duration_rep_type;
typedef typename duration_rep_traits::impl_type duration_rep;
//! Construct from a day count
explicit date_duration(duration_rep days) : days_(days) {};
duration_rep days() const
BOOST_CXX14_CONSTEXPR explicit date_duration(duration_rep day_count) : days_(day_count) {}
/*! construct from special_values - only works when
* instantiated with duration_traits_adapted */
BOOST_CXX14_CONSTEXPR date_duration(special_values sv) :
days_(duration_rep::from_special(sv))
{}
//! returns days_ as it's instantiated type - used for streaming
BOOST_CXX14_CONSTEXPR duration_rep get_rep()const
{
return days_;
};
return days_;
}
BOOST_CXX14_CONSTEXPR special_values as_special() const
{
return days_.as_special();
}
BOOST_CXX14_CONSTEXPR bool is_special()const
{
return days_.is_special();
}
//! returns days as value, not object.
BOOST_CXX14_CONSTEXPR duration_rep_type days() const
{
return duration_rep_traits::as_number(days_);
}
//! Returns the smallest duration -- used by to calculate 'end'
static date_duration unit()
static BOOST_CXX14_CONSTEXPR date_duration unit()
{
return date_duration<duration_rep>(1);
return date_duration<duration_rep_traits>(1);
}
//! Equality
bool operator==(const date_duration& rhs) const
//! Equality
BOOST_CXX14_CONSTEXPR bool operator==(const date_duration& rhs) const
{
return days_ == rhs.days_;
return days_ == rhs.days_;
}
//! Less
bool operator<(const date_duration& rhs) const
//! Less
BOOST_CXX14_CONSTEXPR bool operator<(const date_duration& rhs) const
{
return days_ < rhs.days_;
return days_ < rhs.days_;
}
/* For shortcut operators (+=, -=, etc) simply using
* "days_ += days_" may not work. If instantiated with
* an int_adapter, shortcut operators are not present,
* so this will not compile */
//! Subtract another duration -- result is signed
date_duration operator-(const date_duration& rhs) const
BOOST_CXX14_CONSTEXPR date_duration& operator-=(const date_duration& rhs)
{
return date_duration<duration_rep>(days_ - rhs.days_);
//days_ -= rhs.days_;
days_ = days_ - rhs.days_;
return *this;
}
//! Add a duration -- result is signed
date_duration operator+(const date_duration& rhs) const
BOOST_CXX14_CONSTEXPR date_duration& operator+=(const date_duration& rhs)
{
return date_duration<duration_rep>(days_ + rhs.days_);
days_ = days_ + rhs.days_;
return *this;
}
//! unary- Allows for dd = -date_duration(2); -> dd == -2
BOOST_CXX14_CONSTEXPR date_duration operator-() const
{
return date_duration<duration_rep_traits>(get_rep() * (-1));
}
//! Division operations on a duration with an integer.
BOOST_CXX14_CONSTEXPR date_duration& operator/=(int divisor)
{
days_ = days_ / divisor;
return *this;
}
//! return sign information
bool is_negative() const
BOOST_CXX14_CONSTEXPR bool is_negative() const
{
return days_ < 0;
return days_ < 0;
}
private:
duration_rep days_;
};
};
/*! Struct for instantiating date_duration with <b>NO</b> special values
* functionality. Allows for transparent implementation of either
* date_duration<long> or date_duration<int_adapter<long> > */
struct BOOST_SYMBOL_VISIBLE duration_traits_long
{
typedef long int_type;
typedef long impl_type;
static BOOST_CXX14_CONSTEXPR int_type as_number(impl_type i) { return i; }
};
/*! Struct for instantiating date_duration <b>WITH</b> special values
* functionality. Allows for transparent implementation of either
* date_duration<long> or date_duration<int_adapter<long> > */
struct BOOST_SYMBOL_VISIBLE duration_traits_adapted
{
typedef long int_type;
typedef boost::date_time::int_adapter<long> impl_type;
static BOOST_CXX14_CONSTEXPR int_type as_number(impl_type i) { return i.as_number(); }
};
} } //namspace date_time
/* Copyright (c) 2000, 2001
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
#endif
@@ -0,0 +1,265 @@
#ifndef DATE_DURATION_TYPES_HPP___
#define DATE_DURATION_TYPES_HPP___
/* Copyright (c) 2004 CrystalClear Software, Inc.
* Subject to the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or
* http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include <boost/date_time/compiler_config.hpp>
#include <boost/date_time/int_adapter.hpp>
#include <boost/date_time/special_defs.hpp>
#include <boost/date_time/date_duration.hpp>
namespace boost {
namespace date_time {
//! Additional duration type that represents a number of n*7 days
template <class duration_config>
class BOOST_SYMBOL_VISIBLE weeks_duration : public date_duration<duration_config> {
public:
BOOST_CXX14_CONSTEXPR weeks_duration(typename duration_config::impl_type w)
: date_duration<duration_config>(w * 7) {}
BOOST_CXX14_CONSTEXPR weeks_duration(special_values sv)
: date_duration<duration_config>(sv) {}
};
// predeclare
template<class t>
class BOOST_SYMBOL_VISIBLE years_duration;
//! additional duration type that represents a logical month
/*! A logical month enables things like: "date(2002,Mar,2) + months(2) ->
* 2002-May2". If the date is a last day-of-the-month, the result will
* also be a last-day-of-the-month.
*/
template<class base_config>
class BOOST_SYMBOL_VISIBLE months_duration
{
private:
typedef typename base_config::int_rep int_rep;
typedef typename int_rep::int_type int_type;
typedef typename base_config::date_type date_type;
typedef typename date_type::duration_type duration_type;
typedef typename base_config::month_adjustor_type month_adjustor_type;
typedef months_duration<base_config> months_type;
typedef years_duration<base_config> years_type;
public:
BOOST_CXX14_CONSTEXPR months_duration(int_rep num) : _m(num) {}
BOOST_CXX14_CONSTEXPR months_duration(special_values sv) : _m(sv)
{
_m = int_rep::from_special(sv);
}
int_rep number_of_months() const { return _m; }
//! returns a negative duration
BOOST_CXX14_CONSTEXPR duration_type get_neg_offset(const date_type& d) const
{
month_adjustor_type m_adj(_m.as_number());
return duration_type(m_adj.get_neg_offset(d));
}
BOOST_CXX14_CONSTEXPR duration_type get_offset(const date_type& d) const
{
month_adjustor_type m_adj(_m.as_number());
return duration_type(m_adj.get_offset(d));
}
BOOST_CONSTEXPR bool operator==(const months_type& rhs) const
{
return(_m == rhs._m);
}
BOOST_CONSTEXPR bool operator!=(const months_type& rhs) const
{
return(_m != rhs._m);
}
BOOST_CXX14_CONSTEXPR months_type operator+(const months_type& rhs)const
{
return months_type(_m + rhs._m);
}
BOOST_CXX14_CONSTEXPR months_type& operator+=(const months_type& rhs)
{
_m = _m + rhs._m;
return *this;
}
BOOST_CXX14_CONSTEXPR months_type operator-(const months_type& rhs)const
{
return months_type(_m - rhs._m);
}
BOOST_CXX14_CONSTEXPR months_type& operator-=(const months_type& rhs)
{
_m = _m - rhs._m;
return *this;
}
BOOST_CXX14_CONSTEXPR months_type operator*(const int_type rhs)const
{
return months_type(_m * rhs);
}
BOOST_CXX14_CONSTEXPR months_type& operator*=(const int_type rhs)
{
_m = _m * rhs;
return *this;
}
BOOST_CXX14_CONSTEXPR months_type operator/(const int_type rhs)const
{
return months_type(_m / rhs);
}
BOOST_CXX14_CONSTEXPR months_type& operator/=(const int_type rhs)
{
_m = _m / rhs;
return *this;
}
BOOST_CXX14_CONSTEXPR months_type operator+(const years_type& y)const
{
return months_type(y.number_of_years() * 12 + _m);
}
BOOST_CXX14_CONSTEXPR months_type& operator+=(const years_type& y)
{
_m = y.number_of_years() * 12 + _m;
return *this;
}
BOOST_CXX14_CONSTEXPR months_type operator-(const years_type& y) const
{
return months_type(_m - y.number_of_years() * 12);
}
BOOST_CXX14_CONSTEXPR months_type& operator-=(const years_type& y)
{
_m = _m - y.number_of_years() * 12;
return *this;
}
//
BOOST_CXX14_CONSTEXPR friend date_type operator+(const date_type& d, const months_type& m)
{
return d + m.get_offset(d);
}
BOOST_CXX14_CONSTEXPR friend date_type operator+=(date_type& d, const months_type& m)
{
return d += m.get_offset(d);
}
BOOST_CXX14_CONSTEXPR friend date_type operator-(const date_type& d, const months_type& m)
{
// get_neg_offset returns a negative duration, so we add
return d + m.get_neg_offset(d);
}
BOOST_CXX14_CONSTEXPR friend date_type operator-=(date_type& d, const months_type& m)
{
// get_neg_offset returns a negative duration, so we add
return d += m.get_neg_offset(d);
}
private:
int_rep _m;
};
//! additional duration type that represents a logical year
/*! A logical year enables things like: "date(2002,Mar,2) + years(2) ->
* 2004-Mar-2". If the date is a last day-of-the-month, the result will
* also be a last-day-of-the-month (ie date(2001-Feb-28) + years(3) ->
* 2004-Feb-29).
*/
template<class base_config>
class BOOST_SYMBOL_VISIBLE years_duration
{
private:
typedef typename base_config::int_rep int_rep;
typedef typename int_rep::int_type int_type;
typedef typename base_config::date_type date_type;
typedef typename date_type::duration_type duration_type;
typedef typename base_config::month_adjustor_type month_adjustor_type;
typedef years_duration<base_config> years_type;
typedef months_duration<base_config> months_type;
public:
BOOST_CXX14_CONSTEXPR years_duration(int_rep num) : _y(num) {}
BOOST_CXX14_CONSTEXPR years_duration(special_values sv) : _y(sv)
{
_y = int_rep::from_special(sv);
}
BOOST_CXX14_CONSTEXPR int_rep number_of_years() const { return _y; }
//! returns a negative duration
BOOST_CXX14_CONSTEXPR duration_type get_neg_offset(const date_type& d) const
{
month_adjustor_type m_adj(_y.as_number() * 12);
return duration_type(m_adj.get_neg_offset(d));
}
BOOST_CXX14_CONSTEXPR duration_type get_offset(const date_type& d) const
{
month_adjustor_type m_adj(_y.as_number() * 12);
return duration_type(m_adj.get_offset(d));
}
BOOST_CXX14_CONSTEXPR bool operator==(const years_type& rhs) const
{
return(_y == rhs._y);
}
bool operator!=(const years_type& rhs) const
{
return(_y != rhs._y);
}
BOOST_CXX14_CONSTEXPR years_type operator+(const years_type& rhs)const
{
return years_type(_y + rhs._y);
}
BOOST_CXX14_CONSTEXPR years_type& operator+=(const years_type& rhs)
{
_y = _y + rhs._y;
return *this;
}
BOOST_CXX14_CONSTEXPR years_type operator-(const years_type& rhs)const
{
return years_type(_y - rhs._y);
}
BOOST_CXX14_CONSTEXPR years_type& operator-=(const years_type& rhs)
{
_y = _y - rhs._y;
return *this;
}
BOOST_CXX14_CONSTEXPR years_type operator*(const int_type rhs)const
{
return years_type(_y * rhs);
}
BOOST_CXX14_CONSTEXPR years_type& operator*=(const int_type rhs)
{
_y = _y * rhs;
return *this;
}
BOOST_CXX14_CONSTEXPR years_type operator/(const int_type rhs)const
{
return years_type(_y / rhs);
}
BOOST_CXX14_CONSTEXPR years_type& operator/=(const int_type rhs)
{
_y = _y / rhs;
return *this;
}
BOOST_CXX14_CONSTEXPR months_type operator+(const months_type& m) const
{
return(months_type(_y * 12 + m.number_of_months()));
}
BOOST_CXX14_CONSTEXPR months_type operator-(const months_type& m) const
{
return(months_type(_y * 12 - m.number_of_months()));
}
//
BOOST_CXX14_CONSTEXPR friend date_type operator+(const date_type& d, const years_type& y)
{
return d + y.get_offset(d);
}
BOOST_CXX14_CONSTEXPR friend date_type operator+=(date_type& d, const years_type& y)
{
return d += y.get_offset(d);
}
BOOST_CXX14_CONSTEXPR friend date_type operator-(const date_type& d, const years_type& y)
{
// get_neg_offset returns a negative duration, so we add
return d + y.get_neg_offset(d);
}
BOOST_CXX14_CONSTEXPR friend date_type operator-=(date_type& d, const years_type& y)
{
// get_neg_offset returns a negative duration, so we add
return d += y.get_neg_offset(d);
}
private:
int_rep _y;
};
}} // namespace boost::date_time
#endif // DATE_DURATION_TYPES_HPP___
+766
View File
@@ -0,0 +1,766 @@
#ifndef _DATE_TIME_DATE_FACET__HPP___
#define _DATE_TIME_DATE_FACET__HPP___
/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Martin Andrian, Jeff Garland, Bart Garst
* $Date$
*/
#include <iterator> // ostreambuf_iterator
#include <locale>
#include <string>
#include <vector>
#include <boost/throw_exception.hpp>
#include <boost/algorithm/string/replace.hpp>
#include <boost/date_time/compiler_config.hpp>
#include <boost/date_time/period.hpp>
#include <boost/date_time/special_defs.hpp>
#include <boost/date_time/special_values_formatter.hpp>
#include <boost/date_time/period_formatter.hpp>
#include <boost/date_time/period_parser.hpp>
#include <boost/date_time/date_generator_formatter.hpp>
#include <boost/date_time/date_generator_parser.hpp>
#include <boost/date_time/format_date_parser.hpp>
namespace boost { namespace date_time {
/*! Class that provides format based I/O facet for date types.
*
* This class allows the formatting of dates by using format string.
* Format strings are:
*
* - %A => long_weekday_format - Full name Ex: Tuesday
* - %a => short_weekday_format - Three letter abbreviation Ex: Tue
* - %B => long_month_format - Full name Ex: October
* - %b => short_month_format - Three letter abbreviation Ex: Oct
* - %x => standard_format_specifier - defined by the locale
* - %Y-%b-%d => default_date_format - YYYY-Mon-dd
*
* Default month format == %b
* Default weekday format == %a
*/
template <class date_type,
class CharT,
class OutItrT = std::ostreambuf_iterator<CharT, std::char_traits<CharT> > >
class BOOST_SYMBOL_VISIBLE date_facet : public std::locale::facet {
public:
typedef typename date_type::duration_type duration_type;
// greg_weekday is gregorian_calendar::day_of_week_type
typedef typename date_type::day_of_week_type day_of_week_type;
typedef typename date_type::day_type day_type;
typedef typename date_type::month_type month_type;
typedef boost::date_time::period<date_type,duration_type> period_type;
typedef std::basic_string<CharT> string_type;
typedef CharT char_type;
typedef boost::date_time::period_formatter<CharT> period_formatter_type;
typedef boost::date_time::special_values_formatter<CharT> special_values_formatter_type;
typedef std::vector<std::basic_string<CharT> > input_collection_type;
// used for the output of the date_generators
typedef date_generator_formatter<date_type, CharT> date_gen_formatter_type;
typedef partial_date<date_type> partial_date_type;
typedef nth_kday_of_month<date_type> nth_kday_type;
typedef first_kday_of_month<date_type> first_kday_type;
typedef last_kday_of_month<date_type> last_kday_type;
typedef first_kday_after<date_type> kday_after_type;
typedef first_kday_before<date_type> kday_before_type;
static const char_type long_weekday_format[3];
static const char_type short_weekday_format[3];
static const char_type long_month_format[3];
static const char_type short_month_format[3];
static const char_type default_period_separator[4];
static const char_type standard_format_specifier[3];
static const char_type iso_format_specifier[7];
static const char_type iso_format_extended_specifier[9];
static const char_type default_date_format[9]; // YYYY-Mon-DD
static std::locale::id id;
#if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
std::locale::id& __get_id (void) const { return id; }
#endif
explicit date_facet(::size_t a_ref = 0)
: std::locale::facet(a_ref),
//m_format(standard_format_specifier)
m_format(default_date_format),
m_month_format(short_month_format),
m_weekday_format(short_weekday_format)
{}
explicit date_facet(const char_type* format_str,
const input_collection_type& short_names,
::size_t ref_count = 0)
: std::locale::facet(ref_count),
m_format(format_str),
m_month_format(short_month_format),
m_weekday_format(short_weekday_format),
m_month_short_names(short_names)
{}
explicit date_facet(const char_type* format_str,
period_formatter_type per_formatter = period_formatter_type(),
special_values_formatter_type sv_formatter = special_values_formatter_type(),
date_gen_formatter_type dg_formatter = date_gen_formatter_type(),
::size_t ref_count = 0)
: std::locale::facet(ref_count),
m_format(format_str),
m_month_format(short_month_format),
m_weekday_format(short_weekday_format),
m_period_formatter(per_formatter),
m_date_gen_formatter(dg_formatter),
m_special_values_formatter(sv_formatter)
{}
void format(const char_type* const format_str) {
m_format = format_str;
}
virtual void set_iso_format()
{
m_format = iso_format_specifier;
}
virtual void set_iso_extended_format()
{
m_format = iso_format_extended_specifier;
}
void month_format(const char_type* const format_str) {
m_month_format = format_str;
}
void weekday_format(const char_type* const format_str) {
m_weekday_format = format_str;
}
void period_formatter(period_formatter_type per_formatter) {
m_period_formatter= per_formatter;
}
void special_values_formatter(const special_values_formatter_type& svf)
{
m_special_values_formatter = svf;
}
void short_weekday_names(const input_collection_type& short_names)
{
m_weekday_short_names = short_names;
}
void long_weekday_names(const input_collection_type& long_names)
{
m_weekday_long_names = long_names;
}
void short_month_names(const input_collection_type& short_names)
{
m_month_short_names = short_names;
}
void long_month_names(const input_collection_type& long_names)
{
m_month_long_names = long_names;
}
void date_gen_phrase_strings(const input_collection_type& new_strings,
typename date_gen_formatter_type::phrase_elements beg_pos=date_gen_formatter_type::first)
{
m_date_gen_formatter.elements(new_strings, beg_pos);
}
OutItrT put(OutItrT next,
std::ios_base& a_ios,
char_type fill_char,
const date_type& d) const
{
if (d.is_special()) {
return do_put_special(next, a_ios, fill_char, d.as_special());
}
//The following line of code required the date to support a to_tm function
return do_put_tm(next, a_ios, fill_char, to_tm(d), m_format);
}
OutItrT put(OutItrT next,
std::ios_base& a_ios,
char_type fill_char,
const duration_type& dd) const
{
if (dd.is_special()) {
return do_put_special(next, a_ios, fill_char, dd.get_rep().as_special());
}
typedef std::num_put<CharT, OutItrT> num_put;
if (std::has_facet<num_put>(a_ios.getloc())) {
return std::use_facet<num_put>(a_ios.getloc()).put(next, a_ios, fill_char, dd.get_rep().as_number());
}
else {
num_put* f = new num_put();
std::locale l = std::locale(a_ios.getloc(), f);
a_ios.imbue(l);
return f->put(next, a_ios, fill_char, dd.get_rep().as_number());
}
}
OutItrT put(OutItrT next,
std::ios_base& a_ios,
char_type fill_char,
const month_type& m) const
{
//if (d.is_special()) {
// return do_put_special(next, a_ios, fill_char, d.as_special());
//}
//The following line of code required the date to support a to_tm function
std::tm dtm;
std::memset(&dtm, 0, sizeof(dtm));
dtm.tm_mon = m - 1;
return do_put_tm(next, a_ios, fill_char, dtm, m_month_format);
}
//! puts the day of month
OutItrT put(OutItrT next,
std::ios_base& a_ios,
char_type fill_char,
const day_type& day) const
{
std::tm dtm;
std::memset(&dtm, 0, sizeof(dtm));
dtm.tm_mday = day.as_number();
char_type tmp[3] = {'%','d'};
string_type temp_format(tmp);
return do_put_tm(next, a_ios, fill_char, dtm, temp_format);
}
OutItrT put(OutItrT next,
std::ios_base& a_ios,
char_type fill_char,
const day_of_week_type& dow) const
{
//if (d.is_special()) {
// return do_put_special(next, a_ios, fill_char, d.as_special());
//}
//The following line of code required the date to support a to_tm function
std::tm dtm;
std::memset(&dtm, 0, sizeof(dtm));
dtm.tm_wday = dow;
return do_put_tm(next, a_ios, fill_char, dtm, m_weekday_format);
}
OutItrT put(OutItrT next,
std::ios_base& a_ios,
char_type fill_char,
const period_type& p) const
{
return m_period_formatter.put_period(next, a_ios, fill_char, p, *this);
}
OutItrT put(OutItrT next,
std::ios_base& a_ios,
char_type fill_char,
const partial_date_type& pd) const
{
return m_date_gen_formatter.put_partial_date(next, a_ios, fill_char, pd, *this);
}
OutItrT put(OutItrT next,
std::ios_base& a_ios,
char_type fill_char,
const nth_kday_type& nkd) const
{
return m_date_gen_formatter.put_nth_kday(next, a_ios, fill_char, nkd, *this);
}
OutItrT put(OutItrT next,
std::ios_base& a_ios,
char_type fill_char,
const first_kday_type& fkd) const
{
return m_date_gen_formatter.put_first_kday(next, a_ios, fill_char, fkd, *this);
}
OutItrT put(OutItrT next,
std::ios_base& a_ios,
char_type fill_char,
const last_kday_type& lkd) const
{
return m_date_gen_formatter.put_last_kday(next, a_ios, fill_char, lkd, *this);
}
OutItrT put(OutItrT next,
std::ios_base& a_ios,
char_type fill_char,
const kday_before_type& fkb) const
{
return m_date_gen_formatter.put_kday_before(next, a_ios, fill_char, fkb, *this);
}
OutItrT put(OutItrT next,
std::ios_base& a_ios,
char_type fill_char,
const kday_after_type& fka) const
{
return m_date_gen_formatter.put_kday_after(next, a_ios, fill_char, fka, *this);
}
protected:
virtual OutItrT do_put_special(OutItrT next,
std::ios_base& /*a_ios*/,
char_type /*fill_char*/,
const boost::date_time::special_values sv) const
{
m_special_values_formatter.put_special(next, sv);
return next;
}
virtual OutItrT do_put_tm(OutItrT next,
std::ios_base& a_ios,
char_type fill_char,
const tm& tm_value,
string_type a_format) const
{
// update format string with custom names
if (!m_weekday_long_names.empty()) {
boost::algorithm::replace_all(a_format,
long_weekday_format,
m_weekday_long_names[tm_value.tm_wday]);
}
if (!m_weekday_short_names.empty()) {
boost::algorithm::replace_all(a_format,
short_weekday_format,
m_weekday_short_names[tm_value.tm_wday]);
}
if (!m_month_long_names.empty()) {
boost::algorithm::replace_all(a_format,
long_month_format,
m_month_long_names[tm_value.tm_mon]);
}
if (!m_month_short_names.empty()) {
boost::algorithm::replace_all(a_format,
short_month_format,
m_month_short_names[tm_value.tm_mon]);
}
// use time_put facet to create final string
const char_type* p_format = a_format.c_str();
return std::use_facet<std::time_put<CharT> >(a_ios.getloc()).put(next, a_ios,
fill_char,
&tm_value,
p_format,
p_format + a_format.size());
}
protected:
string_type m_format;
string_type m_month_format;
string_type m_weekday_format;
period_formatter_type m_period_formatter;
date_gen_formatter_type m_date_gen_formatter;
special_values_formatter_type m_special_values_formatter;
input_collection_type m_month_short_names;
input_collection_type m_month_long_names;
input_collection_type m_weekday_short_names;
input_collection_type m_weekday_long_names;
private:
};
template <class date_type, class CharT, class OutItrT>
std::locale::id date_facet<date_type, CharT, OutItrT>::id;
template <class date_type, class CharT, class OutItrT>
const typename date_facet<date_type, CharT, OutItrT>::char_type
date_facet<date_type, CharT, OutItrT>::long_weekday_format[3] = {'%','A'};
template <class date_type, class CharT, class OutItrT>
const typename date_facet<date_type, CharT, OutItrT>::char_type
date_facet<date_type, CharT, OutItrT>::short_weekday_format[3] = {'%','a'};
template <class date_type, class CharT, class OutItrT>
const typename date_facet<date_type, CharT, OutItrT>::char_type
date_facet<date_type, CharT, OutItrT>::long_month_format[3] = {'%','B'};
template <class date_type, class CharT, class OutItrT>
const typename date_facet<date_type, CharT, OutItrT>::char_type
date_facet<date_type, CharT, OutItrT>::short_month_format[3] = {'%','b'};
template <class date_type, class CharT, class OutItrT>
const typename date_facet<date_type, CharT, OutItrT>::char_type
date_facet<date_type, CharT, OutItrT>::default_period_separator[4] = { ' ', '/', ' '};
template <class date_type, class CharT, class OutItrT>
const typename date_facet<date_type, CharT, OutItrT>::char_type
date_facet<date_type, CharT, OutItrT>::standard_format_specifier[3] =
{'%', 'x' };
template <class date_type, class CharT, class OutItrT>
const typename date_facet<date_type, CharT, OutItrT>::char_type
date_facet<date_type, CharT, OutItrT>::iso_format_specifier[7] =
{'%', 'Y', '%', 'm', '%', 'd' };
template <class date_type, class CharT, class OutItrT>
const typename date_facet<date_type, CharT, OutItrT>::char_type
date_facet<date_type, CharT, OutItrT>::iso_format_extended_specifier[9] =
{'%', 'Y', '-', '%', 'm', '-', '%', 'd' };
template <class date_type, class CharT, class OutItrT>
const typename date_facet<date_type, CharT, OutItrT>::char_type
date_facet<date_type, CharT, OutItrT>::default_date_format[9] =
{'%','Y','-','%','b','-','%','d'};
//! Input facet
template <class date_type,
class CharT,
class InItrT = std::istreambuf_iterator<CharT, std::char_traits<CharT> > >
class BOOST_SYMBOL_VISIBLE date_input_facet : public std::locale::facet {
public:
typedef typename date_type::duration_type duration_type;
// greg_weekday is gregorian_calendar::day_of_week_type
typedef typename date_type::day_of_week_type day_of_week_type;
typedef typename date_type::day_type day_type;
typedef typename date_type::month_type month_type;
typedef typename date_type::year_type year_type;
typedef boost::date_time::period<date_type,duration_type> period_type;
typedef std::basic_string<CharT> string_type;
typedef CharT char_type;
typedef boost::date_time::period_parser<date_type, CharT> period_parser_type;
typedef boost::date_time::special_values_parser<date_type,CharT> special_values_parser_type;
typedef std::vector<std::basic_string<CharT> > input_collection_type;
typedef format_date_parser<date_type, CharT> format_date_parser_type;
// date_generators stuff goes here
typedef date_generator_parser<date_type, CharT> date_gen_parser_type;
typedef partial_date<date_type> partial_date_type;
typedef nth_kday_of_month<date_type> nth_kday_type;
typedef first_kday_of_month<date_type> first_kday_type;
typedef last_kday_of_month<date_type> last_kday_type;
typedef first_kday_after<date_type> kday_after_type;
typedef first_kday_before<date_type> kday_before_type;
static const char_type long_weekday_format[3];
static const char_type short_weekday_format[3];
static const char_type long_month_format[3];
static const char_type short_month_format[3];
static const char_type four_digit_year_format[3];
static const char_type two_digit_year_format[3];
static const char_type default_period_separator[4];
static const char_type standard_format_specifier[3];
static const char_type iso_format_specifier[7];
static const char_type iso_format_extended_specifier[9];
static const char_type default_date_format[9]; // YYYY-Mon-DD
static std::locale::id id;
explicit date_input_facet(::size_t a_ref = 0)
: std::locale::facet(a_ref),
m_format(default_date_format),
m_month_format(short_month_format),
m_weekday_format(short_weekday_format),
m_year_format(four_digit_year_format),
m_parser(m_format, std::locale::classic())
// default period_parser & special_values_parser used
{}
explicit date_input_facet(const string_type& format_str,
::size_t a_ref = 0)
: std::locale::facet(a_ref),
m_format(format_str),
m_month_format(short_month_format),
m_weekday_format(short_weekday_format),
m_year_format(four_digit_year_format),
m_parser(m_format, std::locale::classic())
// default period_parser & special_values_parser used
{}
explicit date_input_facet(const string_type& format_str,
const format_date_parser_type& date_parser,
const special_values_parser_type& sv_parser,
const period_parser_type& per_parser,
const date_gen_parser_type& date_gen_parser,
::size_t ref_count = 0)
: std::locale::facet(ref_count),
m_format(format_str),
m_month_format(short_month_format),
m_weekday_format(short_weekday_format),
m_year_format(four_digit_year_format),
m_parser(date_parser),
m_date_gen_parser(date_gen_parser),
m_period_parser(per_parser),
m_sv_parser(sv_parser)
{}
void format(const char_type* const format_str) {
m_format = format_str;
}
virtual void set_iso_format()
{
m_format = iso_format_specifier;
}
virtual void set_iso_extended_format()
{
m_format = iso_format_extended_specifier;
}
void month_format(const char_type* const format_str) {
m_month_format = format_str;
}
void weekday_format(const char_type* const format_str) {
m_weekday_format = format_str;
}
void year_format(const char_type* const format_str) {
m_year_format = format_str;
}
void period_parser(period_parser_type per_parser) {
m_period_parser = per_parser;
}
void short_weekday_names(const input_collection_type& weekday_names)
{
m_parser.short_weekday_names(weekday_names);
}
void long_weekday_names(const input_collection_type& weekday_names)
{
m_parser.long_weekday_names(weekday_names);
}
void short_month_names(const input_collection_type& month_names)
{
m_parser.short_month_names(month_names);
}
void long_month_names(const input_collection_type& month_names)
{
m_parser.long_month_names(month_names);
}
void date_gen_element_strings(const input_collection_type& col)
{
m_date_gen_parser.element_strings(col);
}
void date_gen_element_strings(const string_type& first,
const string_type& second,
const string_type& third,
const string_type& fourth,
const string_type& fifth,
const string_type& last,
const string_type& before,
const string_type& after,
const string_type& of)
{
m_date_gen_parser.element_strings(first,second,third,fourth,fifth,last,before,after,of);
}
void special_values_parser(special_values_parser_type sv_parser)
{
m_sv_parser = sv_parser;
}
InItrT get(InItrT& from,
InItrT& to,
std::ios_base& /*a_ios*/,
date_type& d) const
{
d = m_parser.parse_date(from, to, m_format, m_sv_parser);
return from;
}
InItrT get(InItrT& from,
InItrT& to,
std::ios_base& /*a_ios*/,
month_type& m) const
{
m = m_parser.parse_month(from, to, m_month_format);
return from;
}
InItrT get(InItrT& from,
InItrT& to,
std::ios_base& /*a_ios*/,
day_of_week_type& wd) const
{
wd = m_parser.parse_weekday(from, to, m_weekday_format);
return from;
}
//! Expects 1 or 2 digit day range: 1-31
InItrT get(InItrT& from,
InItrT& to,
std::ios_base& /*a_ios*/,
day_type& d) const
{
d = m_parser.parse_var_day_of_month(from, to);
return from;
}
InItrT get(InItrT& from,
InItrT& to,
std::ios_base& /*a_ios*/,
year_type& y) const
{
y = m_parser.parse_year(from, to, m_year_format);
return from;
}
InItrT get(InItrT& from,
InItrT& to,
std::ios_base& a_ios,
duration_type& dd) const
{
// skip leading whitespace
while(std::isspace(*from) && from != to) { ++from; }
/* num_get.get() will always consume the first character if it
* is a sign indicator (+/-). Special value strings may begin
* with one of these signs so we'll need a copy of it
* in case num_get.get() fails. */
char_type c = '\0';
// TODO Are these characters somewhere in the locale?
if(*from == '-' || *from == '+') {
c = *from;
}
typedef std::num_get<CharT, InItrT> num_get;
typename duration_type::duration_rep_type val = 0;
std::ios_base::iostate err = std::ios_base::goodbit;
if (std::has_facet<num_get>(a_ios.getloc())) {
from = std::use_facet<num_get>(a_ios.getloc()).get(from, to, a_ios, err, val);
}
else {
num_get* ng = new num_get();
std::locale l = std::locale(a_ios.getloc(), ng);
a_ios.imbue(l);
from = ng->get(from, to, a_ios, err, val);
}
if(err & std::ios_base::failbit){
typedef typename special_values_parser_type::match_results match_results;
match_results mr;
if(c == '-' || c == '+') { // was the first character consumed?
mr.cache += c;
}
m_sv_parser.match(from, to, mr);
if(mr.current_match == match_results::PARSE_ERROR) {
boost::throw_exception(std::ios_base::failure("Parse failed. No match found for '" + mr.cache + "'"));
BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(return from); // should never reach
}
dd = duration_type(static_cast<special_values>(mr.current_match));
}
else {
dd = duration_type(val);
}
return from;
}
InItrT get(InItrT& from,
InItrT& to,
std::ios_base& a_ios,
period_type& p) const
{
p = m_period_parser.get_period(from, to, a_ios, p, duration_type::unit(), *this);
return from;
}
InItrT get(InItrT& from,
InItrT& to,
std::ios_base& a_ios,
nth_kday_type& nkd) const
{
nkd = m_date_gen_parser.get_nth_kday_type(from, to, a_ios, *this);
return from;
}
InItrT get(InItrT& from,
InItrT& to,
std::ios_base& a_ios,
partial_date_type& pd) const
{
pd = m_date_gen_parser.get_partial_date_type(from, to, a_ios, *this);
return from;
}
InItrT get(InItrT& from,
InItrT& to,
std::ios_base& a_ios,
first_kday_type& fkd) const
{
fkd = m_date_gen_parser.get_first_kday_type(from, to, a_ios, *this);
return from;
}
InItrT get(InItrT& from,
InItrT& to,
std::ios_base& a_ios,
last_kday_type& lkd) const
{
lkd = m_date_gen_parser.get_last_kday_type(from, to, a_ios, *this);
return from;
}
InItrT get(InItrT& from,
InItrT& to,
std::ios_base& a_ios,
kday_before_type& fkb) const
{
fkb = m_date_gen_parser.get_kday_before_type(from, to, a_ios, *this);
return from;
}
InItrT get(InItrT& from,
InItrT& to,
std::ios_base& a_ios,
kday_after_type& fka) const
{
fka = m_date_gen_parser.get_kday_after_type(from, to, a_ios, *this);
return from;
}
protected:
string_type m_format;
string_type m_month_format;
string_type m_weekday_format;
string_type m_year_format;
format_date_parser_type m_parser;
date_gen_parser_type m_date_gen_parser;
period_parser_type m_period_parser;
special_values_parser_type m_sv_parser;
private:
};
template <class date_type, class CharT, class OutItrT>
std::locale::id date_input_facet<date_type, CharT, OutItrT>::id;
template <class date_type, class CharT, class OutItrT>
const typename date_input_facet<date_type, CharT, OutItrT>::char_type
date_input_facet<date_type, CharT, OutItrT>::long_weekday_format[3] = {'%','A'};
template <class date_type, class CharT, class OutItrT>
const typename date_input_facet<date_type, CharT, OutItrT>::char_type
date_input_facet<date_type, CharT, OutItrT>::short_weekday_format[3] = {'%','a'};
template <class date_type, class CharT, class OutItrT>
const typename date_input_facet<date_type, CharT, OutItrT>::char_type
date_input_facet<date_type, CharT, OutItrT>::long_month_format[3] = {'%','B'};
template <class date_type, class CharT, class OutItrT>
const typename date_input_facet<date_type, CharT, OutItrT>::char_type
date_input_facet<date_type, CharT, OutItrT>::short_month_format[3] = {'%','b'};
template <class date_type, class CharT, class OutItrT>
const typename date_input_facet<date_type, CharT, OutItrT>::char_type
date_input_facet<date_type, CharT, OutItrT>::four_digit_year_format[3] = {'%','Y'};
template <class date_type, class CharT, class OutItrT>
const typename date_input_facet<date_type, CharT, OutItrT>::char_type
date_input_facet<date_type, CharT, OutItrT>::two_digit_year_format[3] = {'%','y'};
template <class date_type, class CharT, class OutItrT>
const typename date_input_facet<date_type, CharT, OutItrT>::char_type
date_input_facet<date_type, CharT, OutItrT>::default_period_separator[4] = { ' ', '/', ' '};
template <class date_type, class CharT, class OutItrT>
const typename date_input_facet<date_type, CharT, OutItrT>::char_type
date_input_facet<date_type, CharT, OutItrT>::standard_format_specifier[3] =
{'%', 'x' };
template <class date_type, class CharT, class OutItrT>
const typename date_input_facet<date_type, CharT, OutItrT>::char_type
date_input_facet<date_type, CharT, OutItrT>::iso_format_specifier[7] =
{'%', 'Y', '%', 'm', '%', 'd' };
template <class date_type, class CharT, class OutItrT>
const typename date_input_facet<date_type, CharT, OutItrT>::char_type
date_input_facet<date_type, CharT, OutItrT>::iso_format_extended_specifier[9] =
{'%', 'Y', '-', '%', 'm', '-', '%', 'd' };
template <class date_type, class CharT, class OutItrT>
const typename date_input_facet<date_type, CharT, OutItrT>::char_type
date_input_facet<date_type, CharT, OutItrT>::default_date_format[9] =
{'%','Y','-','%','b','-','%','d'};
} } // namespaces
#endif
+91 -27
View File
@@ -1,8 +1,12 @@
#ifndef DATE_TIME_SIMPLE_FORMAT_HPP___
#define DATE_TIME_SIMPLE_FORMAT_HPP___
/* Copyright (c) 2002 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include "boost/date_time/parse_format_base.hpp"
@@ -11,23 +15,24 @@ namespace boost {
namespace date_time {
//! Class to provide simple basic formatting rules
template<class charT>
class simple_format {
public:
//! String used printed is date is invalid
static const char* not_a_date()
static const charT* not_a_date()
{
return "not-a-date";
return "not-a-date-time";
}
//! String used to for positive infinity value
static const char* pos_infinity()
{ //2001-Jan-03
return "+infinity ";
static const charT* pos_infinity()
{
return "+infinity";
}
//! String used to for positive infinity value
static const char* neg_infinity()
static const charT* neg_infinity()
{
return "-infinity ";
return "-infinity";
}
//! Describe month format
static month_format_spec month_format()
@@ -44,51 +49,110 @@ public:
return true;
}
//! Char to sep?
static char year_sep_char()
static charT year_sep_char()
{
return '-';
}
//! char between year-month
static char month_sep_char()
static charT month_sep_char()
{
return '-';
}
//! Char to separate month-day
static char day_sep_char()
static charT day_sep_char()
{
return '-';
}
//! char between date-hours
static char hour_sep_char()
static charT hour_sep_char()
{
return ' ';
}
//! char between hour and minute
static char minute_sep_char()
static charT minute_sep_char()
{
return ':';
}
//! char for second
static char second_sep_char()
static charT second_sep_char()
{
return ':';
}
};
#ifndef BOOST_NO_STD_WSTRING
//! Specialization of formmating rules for wchar_t
template<>
class simple_format<wchar_t> {
public:
//! String used printed is date is invalid
static const wchar_t* not_a_date()
{
return L"not-a-date-time";
}
//! String used to for positive infinity value
static const wchar_t* pos_infinity()
{
return L"+infinity";
}
//! String used to for positive infinity value
static const wchar_t* neg_infinity()
{
return L"-infinity";
}
//! Describe month format
static month_format_spec month_format()
{
return month_as_short_string;
}
static ymd_order_spec date_order()
{
return ymd_order_iso; //YYYY-MM-DD
}
//! This format uses '-' to separate date elements
static bool has_date_sep_chars()
{
return true;
}
//! Char to sep?
static wchar_t year_sep_char()
{
return '-';
}
//! char between year-month
static wchar_t month_sep_char()
{
return '-';
}
//! Char to separate month-day
static wchar_t day_sep_char()
{
return '-';
}
//! char between date-hours
static wchar_t hour_sep_char()
{
return ' ';
}
//! char between hour and minute
static wchar_t minute_sep_char()
{
return ':';
}
//! char for second
static wchar_t second_sep_char()
{
return ':';
}
};
#endif // BOOST_NO_STD_WSTRING
} } //namespace date_time
/* Copyright (c) 2002
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
+42 -32
View File
@@ -1,31 +1,42 @@
#ifndef DATE_TIME_DATE_FORMATTING_HPP___
#define DATE_TIME_DATE_FORMATTING_HPP___
/* Copyright (c) 2002 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include "boost/date_time/iso_format.hpp"
#include "boost/date_time/compiler_config.hpp"
#include <boost/io/ios_state.hpp>
#include <string>
#include <sstream>
#include <iomanip>
/* NOTE: "formatter" code for older compilers, ones that define
* BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS, is located in
* date_formatting_limited.hpp
*/
namespace boost {
namespace date_time {
//! Formats a month as as string into an ostream
template<class month_type, class format_type>
template<class month_type, class format_type, class charT=char>
class month_formatter
{
typedef std::basic_ostream<charT> ostream_type;
public:
//! Formats a month as as string into an ostream
/*! This function demands that month_type provide
* functions for converting to short and long strings
* if that capability is used.
*/
static std::ostream& format_month(const month_type& month,
std::ostream& os)
static ostream_type& format_month(const month_type& month,
ostream_type &os)
{
switch (format_type::month_format())
{
@@ -41,10 +52,13 @@ namespace date_time {
}
case month_as_integer:
{
os << std::setw(2) << std::setfill('0') << month.as_number();
boost::io::basic_ios_fill_saver<charT> ifs(os);
os << std::setw(2) << std::setfill(os.widen('0')) << month.as_number();
break;
}
default:
break;
}
return os;
} // format_month
@@ -52,7 +66,7 @@ namespace date_time {
//! Convert ymd to a standard string formatting policies
template<class ymd_type, class format_type>
template<class ymd_type, class format_type, class charT=char>
class ymd_formatter
{
public:
@@ -65,20 +79,26 @@ namespace date_time {
* an integer or a string as controled by the formatting
* policy
*/
static std::string ymd_to_string(ymd_type ymd)
static std::basic_string<charT> ymd_to_string(ymd_type ymd)
{
typedef typename ymd_type::month_type month_type;
std::ostringstream ss;
std::basic_ostringstream<charT> ss;
// Temporarily switch to classic locale to prevent possible formatting
// of year with comma or other character (for example 2,008).
ss.imbue(std::locale::classic());
ss << ymd.year;
ss.imbue(std::locale());
if (format_type::has_date_sep_chars()) {
ss << format_type::month_sep_char();
}
//this name is a bit ugly, oh well....
month_formatter<month_type,format_type>::format_month(ymd.month, ss);
month_formatter<month_type,format_type,charT>::format_month(ymd.month, ss);
if (format_type::has_date_sep_chars()) {
ss << format_type::day_sep_char();
}
ss << std::setw(2) << std::setfill('0')
ss << std::setw(2) << std::setfill(ss.widen('0'))
<< ymd.day;
return ss.str();
}
@@ -86,42 +106,32 @@ namespace date_time {
//! Convert a date to string using format policies
template<class date_type, class format_type>
template<class date_type, class format_type, class charT=char>
class date_formatter
{
public:
typedef std::basic_string<charT> string_type;
//! Convert to a date to standard string using format policies
static std::string date_to_string(date_type d)
static string_type date_to_string(date_type d)
{
typedef typename date_type::ymd_type ymd_type;
if (d.is_not_a_date()) {
return format_type::not_a_date();
return string_type(format_type::not_a_date());
}
if (d.is_neg_infinity()) {
return format_type::neg_infinity();
return string_type(format_type::neg_infinity());
}
if (d.is_pos_infinity()) {
return format_type::pos_infinity();
return string_type(format_type::pos_infinity());
}
ymd_type ymd = d.year_month_day();
return ymd_formatter<ymd_type, format_type>::ymd_to_string(ymd);
return ymd_formatter<ymd_type, format_type, charT>::ymd_to_string(ymd);
}
};
} } //namespace date_time
/* Copyright (c) 2002
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
#endif
@@ -0,0 +1,121 @@
#ifndef DATE_TIME_DATE_FORMATTING_LIMITED_HPP___
#define DATE_TIME_DATE_FORMATTING_LIMITED_HPP___
/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include "boost/date_time/iso_format.hpp"
#include "boost/date_time/compiler_config.hpp"
#include <string>
#include <sstream>
#include <iomanip>
namespace boost {
namespace date_time {
//! Formats a month as as string into an ostream
template<class month_type, class format_type>
class month_formatter
{
public:
//! Formats a month as as string into an ostream
/*! This function demands that month_type provide
* functions for converting to short and long strings
* if that capability is used.
*/
static std::ostream& format_month(const month_type& month,
std::ostream& os)
{
switch (format_type::month_format())
{
case month_as_short_string:
{
os << month.as_short_string();
break;
}
case month_as_long_string:
{
os << month.as_long_string();
break;
}
case month_as_integer:
{
os << std::setw(2) << std::setfill('0') << month.as_number();
break;
}
}
return os;
} // format_month
};
//! Convert ymd to a standard string formatting policies
template<class ymd_type, class format_type>
class ymd_formatter
{
public:
//! Convert ymd to a standard string formatting policies
/*! This is standard code for handling date formatting with
* year-month-day based date information. This function
* uses the format_type to control whether the string will
* contain separator characters, and if so what the character
* will be. In addtion, it can format the month as either
* an integer or a string as controled by the formatting
* policy
*/
static std::string ymd_to_string(ymd_type ymd)
{
typedef typename ymd_type::month_type month_type;
std::ostringstream ss;
ss << ymd.year;
if (format_type::has_date_sep_chars()) {
ss << format_type::month_sep_char();
}
//this name is a bit ugly, oh well....
month_formatter<month_type,format_type>::format_month(ymd.month, ss);
if (format_type::has_date_sep_chars()) {
ss << format_type::day_sep_char();
}
ss << std::setw(2) << std::setfill('0')
<< ymd.day;
return ss.str();
}
};
//! Convert a date to string using format policies
template<class date_type, class format_type>
class date_formatter
{
public:
//! Convert to a date to standard string using format policies
static std::string date_to_string(date_type d)
{
typedef typename date_type::ymd_type ymd_type;
if (d.is_not_a_date()) {
return format_type::not_a_date();
}
if (d.is_neg_infinity()) {
return format_type::neg_infinity();
}
if (d.is_pos_infinity()) {
return format_type::pos_infinity();
}
ymd_type ymd = d.year_month_day();
return ymd_formatter<ymd_type, format_type>::ymd_to_string(ymd);
}
};
} } //namespace date_time
#endif
@@ -1,8 +1,12 @@
#ifndef DATE_TIME_DATE_FORMATTING_LOCALES_HPP___
#define DATE_TIME_DATE_FORMATTING_LOCALES_HPP___
/* Copyright (c) 2002 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
@@ -13,6 +17,7 @@
#include "boost/date_time/iso_format.hpp"
#include "boost/date_time/date_names_put.hpp"
#include "boost/date_time/parse_format_base.hpp"
#include <boost/io/ios_state.hpp>
//#include <string>
#include <sstream>
#include <iomanip>
@@ -36,33 +41,34 @@ namespace date_time {
const facet_type& f)
{
switch (f.month_format())
switch (f.month_format())
{
case month_as_short_string:
{
case month_as_short_string:
{
std::ostreambuf_iterator<charT> oitr(os);
f.put_month_short(oitr, month.as_enum());
break;
}
case month_as_long_string:
{
case month_as_long_string:
{
std::ostreambuf_iterator<charT> oitr(os);
f.put_month_long(oitr, month.as_enum());
break;
}
case month_as_integer:
{
os << std::setw(2) << std::setfill('0') << month.as_number();
case month_as_integer:
{
boost::io::basic_ios_fill_saver<charT> ifs(os);
os << std::setw(2) << std::setfill(os.widen('0')) << month.as_number();
break;
}
}
} // format_month
};
//! Formats a weekday
//! Formats a weekday
template<class weekday_type,
class facet_type,
class charT = char>
@@ -86,7 +92,7 @@ namespace date_time {
else {
f.put_weekday_short(oitr, wd.as_enum());
}
} // format_weekday
};
@@ -100,19 +106,19 @@ namespace date_time {
{
public:
typedef typename ymd_type::month_type month_type;
typedef ostream_month_formatter<facet_type> month_formatter;
typedef ostream_month_formatter<facet_type, charT> month_formatter_type;
typedef std::basic_ostream<charT> ostream_type;
typedef std::basic_string<charT> foo_type;
//! Convert ymd to a standard string formatting policies
/*! This is standard code for handling date formatting with
* year-month-day based date information. This function
* year-month-day based date information. This function
* uses the format_type to control whether the string will
* contain separator characters, and if so what the character
* will be. In addtion, it can format the month as either
* an integer or a string as controled by the formatting
* an integer or a string as controled by the formatting
* policy
*/
*/
// static string_type ymd_to_string(ymd_type ymd)
// {
// std::ostringstream ss;
@@ -123,10 +129,11 @@ namespace date_time {
// Put ymd to ostream -- part of ostream refactor
static void ymd_put(ymd_type ymd,
static void ymd_put(ymd_type ymd,
ostream_type& os,
const facet_type& f)
{
boost::io::basic_ios_fill_saver<charT> ifs(os);
std::ostreambuf_iterator<charT> oitr(os);
switch (f.date_order()) {
case ymd_order_iso: {
@@ -134,20 +141,20 @@ namespace date_time {
if (f.has_date_sep_chars()) {
f.month_sep_char(oitr);
}
month_formatter::format_month(ymd.month, os, f);
month_formatter_type::format_month(ymd.month, os, f);
if (f.has_date_sep_chars()) {
f.day_sep_char(oitr);
}
os << std::setw(2) << std::setfill('0')
os << std::setw(2) << std::setfill(os.widen('0'))
<< ymd.day;
break;
}
case ymd_order_us: {
month_formatter::format_month(ymd.month, os, f);
month_formatter_type::format_month(ymd.month, os, f);
if (f.has_date_sep_chars()) {
f.day_sep_char(oitr);
}
os << std::setw(2) << std::setfill('0')
os << std::setw(2) << std::setfill(os.widen('0'))
<< ymd.day;
if (f.has_date_sep_chars()) {
f.month_sep_char(oitr);
@@ -156,12 +163,12 @@ namespace date_time {
break;
}
case ymd_order_dmy: {
os << std::setw(2) << std::setfill('0')
os << std::setw(2) << std::setfill(os.widen('0'))
<< ymd.day;
if (f.has_date_sep_chars()) {
f.day_sep_char(oitr);
}
month_formatter::format_month(ymd.month, os, f);
month_formatter_type::format_month(ymd.month, os, f);
if (f.has_date_sep_chars()) {
f.month_sep_char(oitr);
}
@@ -183,8 +190,8 @@ namespace date_time {
typedef std::basic_ostream<charT> ostream_type;
typedef typename date_type::ymd_type ymd_type;
//! Put date into an ostream
static void date_put(const date_type& d,
//! Put date into an ostream
static void date_put(const date_type& d,
ostream_type& os,
const facet_type& f)
{
@@ -197,11 +204,11 @@ namespace date_time {
std::ostreambuf_iterator<charT> coi(os);
f.put_special_value(coi, sv);
}
}
}
//! Put date into an ostream
static void date_put(const date_type& d,
//! Put date into an ostream
static void date_put(const date_type& d,
ostream_type& os)
{
//retrieve the local from the ostream
@@ -215,24 +222,13 @@ namespace date_time {
facet_type default_facet;
date_put(d, os, default_facet);
}
} // date_to_ostream
} // date_to_ostream
}; //class date_formatter
} } //namespace date_time
#endif
/* Copyright (c) 2002
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
#endif
@@ -0,0 +1,265 @@
#ifndef _DATE_TIME_DATE_GENERATOR_FORMATTER__HPP___
#define _DATE_TIME_DATE_GENERATOR_FORMATTER__HPP___
/* Copyright (c) 2004 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include "boost/date_time/date_generators.hpp"
namespace boost {
namespace date_time {
//! Formats date_generators for output
/*! Formatting of date_generators follows specific orders for the
* various types of date_generators.
* - partial_date => "dd Month"
* - nth_day_of_the_week_in_month => "nth weekday of month"
* - first_day_of_the_week_in_month => "first weekday of month"
* - last_day_of_the_week_in_month => "last weekday of month"
* - first_day_of_the_week_after => "weekday after"
* - first_day_of_the_week_before => "weekday before"
* While the order of the elements in these phrases cannot be changed,
* the elements themselves can be. Weekday and Month get their formats
* and names from the date_facet. The remaining elements are stored in
* the date_generator_formatter and can be customized upon construction
* or via a member function. The default elements are those shown in the
* examples above.
*/
template <class date_type, class CharT, class OutItrT = std::ostreambuf_iterator<CharT, std::char_traits<CharT> > >
class date_generator_formatter {
public:
typedef partial_date<date_type> partial_date_type;
typedef nth_kday_of_month<date_type> nth_kday_type;
typedef first_kday_of_month<date_type> first_kday_type;
typedef last_kday_of_month<date_type> last_kday_type;
typedef first_kday_after<date_type> kday_after_type;
typedef first_kday_before<date_type> kday_before_type;
typedef CharT char_type;
typedef std::basic_string<char_type> string_type;
typedef std::vector<string_type> collection_type;
static const char_type first_string[6];
static const char_type second_string[7];
static const char_type third_string[6];
static const char_type fourth_string[7];
static const char_type fifth_string[6];
static const char_type last_string[5];
static const char_type before_string[8];
static const char_type after_string[6];
static const char_type of_string[3];
enum phrase_elements {first=0, second, third, fourth, fifth, last,
before, after, of, number_of_phrase_elements};
//! Default format elements used
date_generator_formatter()
{
phrase_strings.reserve(number_of_phrase_elements);
phrase_strings.push_back(string_type(first_string));
phrase_strings.push_back(string_type(second_string));
phrase_strings.push_back(string_type(third_string));
phrase_strings.push_back(string_type(fourth_string));
phrase_strings.push_back(string_type(fifth_string));
phrase_strings.push_back(string_type(last_string));
phrase_strings.push_back(string_type(before_string));
phrase_strings.push_back(string_type(after_string));
phrase_strings.push_back(string_type(of_string));
}
//! Constructor that allows for a custom set of phrase elements
date_generator_formatter(const string_type& first_str,
const string_type& second_str,
const string_type& third_str,
const string_type& fourth_str,
const string_type& fifth_str,
const string_type& last_str,
const string_type& before_str,
const string_type& after_str,
const string_type& of_str)
{
phrase_strings.reserve(number_of_phrase_elements);
phrase_strings.push_back(first_str);
phrase_strings.push_back(second_str);
phrase_strings.push_back(third_str);
phrase_strings.push_back(fourth_str);
phrase_strings.push_back(fifth_str);
phrase_strings.push_back(last_str);
phrase_strings.push_back(before_str);
phrase_strings.push_back(after_str);
phrase_strings.push_back(of_str);
}
//! Replace the set of phrase elements with those contained in new_strings
/*! The order of the strings in the given collection is important.
* They must follow:
* - first, second, third, fourth, fifth, last, before, after, of.
*
* It is not necessary to send in a complete set if only a few
* elements are to be replaced as long as the correct beg_pos is used.
*
* Ex: To keep the default first through fifth elements, but replace
* the rest with a collection of:
* - "final", "prior", "following", "in".
* The beg_pos of date_generator_formatter::last would be used.
*/
void elements(const collection_type& new_strings,
phrase_elements beg_pos=first)
{
if(beg_pos < number_of_phrase_elements) {
typename collection_type::iterator itr = phrase_strings.begin();
itr += beg_pos;
std::copy(new_strings.begin(), new_strings.end(),
itr);
//phrase_strings.begin());
}
}
//!Put a partial_date => "dd Month"
template<class facet_type>
OutItrT put_partial_date(OutItrT next, std::ios_base& a_ios,
CharT a_fill, const partial_date_type& pd,
const facet_type& facet) const
{
facet.put(next, a_ios, a_fill, pd.day());
next = a_fill; //TODO change this ???
facet.put(next, a_ios, a_fill, pd.month());
return next;
}
//! Put an nth_day_of_the_week_in_month => "nth weekday of month"
template<class facet_type>
OutItrT put_nth_kday(OutItrT next, std::ios_base& a_ios,
CharT a_fill, const nth_kday_type& nkd,
const facet_type& facet) const
{
put_string(next, phrase_strings[nkd.nth_week() -1]);
next = a_fill; //TODO change this ???
facet.put(next, a_ios, a_fill, nkd.day_of_week());
next = a_fill; //TODO change this ???
put_string(next, string_type(of_string));
next = a_fill; //TODO change this ???
facet.put(next, a_ios, a_fill, nkd.month());
return next;
}
//! Put a first_day_of_the_week_in_month => "first weekday of month"
template<class facet_type>
OutItrT put_first_kday(OutItrT next, std::ios_base& a_ios,
CharT a_fill, const first_kday_type& fkd,
const facet_type& facet) const
{
put_string(next, phrase_strings[first]);
next = a_fill; //TODO change this ???
facet.put(next, a_ios, a_fill, fkd.day_of_week());
next = a_fill; //TODO change this ???
put_string(next, string_type(of_string));
next = a_fill; //TODO change this ???
facet.put(next, a_ios, a_fill, fkd.month());
return next;
}
//! Put a last_day_of_the_week_in_month => "last weekday of month"
template<class facet_type>
OutItrT put_last_kday(OutItrT next, std::ios_base& a_ios,
CharT a_fill, const last_kday_type& lkd,
const facet_type& facet) const
{
put_string(next, phrase_strings[last]);
next = a_fill; //TODO change this ???
facet.put(next, a_ios, a_fill, lkd.day_of_week());
next = a_fill; //TODO change this ???
put_string(next, string_type(of_string));
next = a_fill; //TODO change this ???
facet.put(next, a_ios, a_fill, lkd.month());
return next;
}
//! Put a first_day_of_the_week_before => "weekday before"
template<class facet_type>
OutItrT put_kday_before(OutItrT next, std::ios_base& a_ios,
CharT a_fill, const kday_before_type& fkb,
const facet_type& facet) const
{
facet.put(next, a_ios, a_fill, fkb.day_of_week());
next = a_fill; //TODO change this ???
put_string(next, phrase_strings[before]);
return next;
}
//! Put a first_day_of_the_week_after => "weekday after"
template<class facet_type>
OutItrT put_kday_after(OutItrT next, std::ios_base& a_ios,
CharT a_fill, const kday_after_type& fka,
const facet_type& facet) const
{
facet.put(next, a_ios, a_fill, fka.day_of_week());
next = a_fill; //TODO change this ???
put_string(next, phrase_strings[after]);
return next;
}
private:
collection_type phrase_strings;
//! helper function to put the various member string into stream
OutItrT put_string(OutItrT next, const string_type& str) const
{
typename string_type::const_iterator itr = str.begin();
while(itr != str.end()) {
*next = *itr;
++itr;
++next;
}
return next;
}
};
template<class date_type, class CharT, class OutItrT>
const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
date_generator_formatter<date_type, CharT, OutItrT>::first_string[6] =
{'f','i','r','s','t'};
template<class date_type, class CharT, class OutItrT>
const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
date_generator_formatter<date_type, CharT, OutItrT>::second_string[7] =
{'s','e','c','o','n','d'};
template<class date_type, class CharT, class OutItrT>
const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
date_generator_formatter<date_type, CharT, OutItrT>::third_string[6] =
{'t','h','i','r','d'};
template<class date_type, class CharT, class OutItrT>
const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
date_generator_formatter<date_type, CharT, OutItrT>::fourth_string[7] =
{'f','o','u','r','t','h'};
template<class date_type, class CharT, class OutItrT>
const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
date_generator_formatter<date_type, CharT, OutItrT>::fifth_string[6] =
{'f','i','f','t','h'};
template<class date_type, class CharT, class OutItrT>
const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
date_generator_formatter<date_type, CharT, OutItrT>::last_string[5] =
{'l','a','s','t'};
template<class date_type, class CharT, class OutItrT>
const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
date_generator_formatter<date_type, CharT, OutItrT>::before_string[8] =
{'b','e','f','o','r','e'};
template<class date_type, class CharT, class OutItrT>
const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
date_generator_formatter<date_type, CharT, OutItrT>::after_string[6] =
{'a','f','t','e','r'};
template<class date_type, class CharT, class OutItrT>
const typename date_generator_formatter<date_type, CharT, OutItrT>::char_type
date_generator_formatter<date_type, CharT, OutItrT>::of_string[3] =
{'o','f'};
} } // namespaces
#endif // _DATE_TIME_DATE_GENERATOR_FORMATTER__HPP___
@@ -0,0 +1,330 @@
#ifndef DATE_TIME_DATE_GENERATOR_PARSER_HPP__
#define DATE_TIME_DATE_GENERATOR_PARSER_HPP__
/* Copyright (c) 2005 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include <string>
#include <vector>
#include <iterator> // istreambuf_iterator
#include <boost/throw_exception.hpp>
#include <boost/date_time/compiler_config.hpp>
#include <boost/date_time/string_parse_tree.hpp>
#include <boost/date_time/date_generators.hpp>
#include <boost/date_time/format_date_parser.hpp>
namespace boost { namespace date_time {
//! Class for date_generator parsing
/*! The elements of a date_generator "phrase" are parsed from the input stream in a
* particular order. All elements are required and the order in which they appear
* cannot change, however, the elements themselves can be changed. The default
* elements and their order are as follows:
*
* - partial_date => "dd Month"
* - nth_day_of_the_week_in_month => "nth weekday of month"
* - first_day_of_the_week_in_month => "first weekday of month"
* - last_day_of_the_week_in_month => "last weekday of month"
* - first_day_of_the_week_after => "weekday after"
* - first_day_of_the_week_before => "weekday before"
*
* Weekday and Month names and formats are handled via the date_input_facet.
*
*/
template<class date_type, typename charT>
class date_generator_parser
{
public:
typedef std::basic_string<charT> string_type;
typedef std::istreambuf_iterator<charT> stream_itr_type;
typedef typename date_type::month_type month_type;
typedef typename date_type::day_of_week_type day_of_week_type;
typedef typename date_type::day_type day_type;
typedef string_parse_tree<charT> parse_tree_type;
typedef typename parse_tree_type::parse_match_result_type match_results;
typedef std::vector<std::basic_string<charT> > collection_type;
typedef partial_date<date_type> partial_date_type;
typedef nth_kday_of_month<date_type> nth_kday_type;
typedef first_kday_of_month<date_type> first_kday_type;
typedef last_kday_of_month<date_type> last_kday_type;
typedef first_kday_after<date_type> kday_after_type;
typedef first_kday_before<date_type> kday_before_type;
typedef charT char_type;
static const char_type first_string[6];
static const char_type second_string[7];
static const char_type third_string[6];
static const char_type fourth_string[7];
static const char_type fifth_string[6];
static const char_type last_string[5];
static const char_type before_string[8];
static const char_type after_string[6];
static const char_type of_string[3];
enum phrase_elements {first=0, second, third, fourth, fifth, last,
before, after, of, number_of_phrase_elements};
//! Creates a date_generator_parser with the default set of "element_strings"
date_generator_parser()
{
element_strings(string_type(first_string),
string_type(second_string),
string_type(third_string),
string_type(fourth_string),
string_type(fifth_string),
string_type(last_string),
string_type(before_string),
string_type(after_string),
string_type(of_string));
}
//! Creates a date_generator_parser using a user defined set of element strings
date_generator_parser(const string_type& first_str,
const string_type& second_str,
const string_type& third_str,
const string_type& fourth_str,
const string_type& fifth_str,
const string_type& last_str,
const string_type& before_str,
const string_type& after_str,
const string_type& of_str)
{
element_strings(first_str, second_str, third_str, fourth_str, fifth_str,
last_str, before_str, after_str, of_str);
}
//! Replace strings that determine nth week for generator
void element_strings(const string_type& first_str,
const string_type& second_str,
const string_type& third_str,
const string_type& fourth_str,
const string_type& fifth_str,
const string_type& last_str,
const string_type& before_str,
const string_type& after_str,
const string_type& of_str)
{
collection_type phrases;
phrases.push_back(first_str);
phrases.push_back(second_str);
phrases.push_back(third_str);
phrases.push_back(fourth_str);
phrases.push_back(fifth_str);
phrases.push_back(last_str);
phrases.push_back(before_str);
phrases.push_back(after_str);
phrases.push_back(of_str);
m_element_strings = parse_tree_type(phrases, this->first); // enum first
}
void element_strings(const collection_type& col)
{
m_element_strings = parse_tree_type(col, this->first); // enum first
}
//! returns partial_date parsed from stream
template<class facet_type>
partial_date_type
get_partial_date_type(stream_itr_type& sitr,
stream_itr_type& stream_end,
std::ios_base& a_ios,
const facet_type& facet) const
{
// skip leading whitespace
while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
day_type d(1);
month_type m(1);
facet.get(sitr, stream_end, a_ios, d);
facet.get(sitr, stream_end, a_ios, m);
return partial_date_type(d,m);
}
//! returns nth_kday_of_week parsed from stream
template<class facet_type>
nth_kday_type
get_nth_kday_type(stream_itr_type& sitr,
stream_itr_type& stream_end,
std::ios_base& a_ios,
const facet_type& facet) const
{
// skip leading whitespace
while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
typename nth_kday_type::week_num wn;
day_of_week_type wd(0); // no default constructor
month_type m(1); // no default constructor
match_results mr = m_element_strings.match(sitr, stream_end);
switch(mr.current_match) {
case first : { wn = nth_kday_type::first; break; }
case second : { wn = nth_kday_type::second; break; }
case third : { wn = nth_kday_type::third; break; }
case fourth : { wn = nth_kday_type::fourth; break; }
case fifth : { wn = nth_kday_type::fifth; break; }
default:
{
boost::throw_exception(std::ios_base::failure("Parse failed. No match found for '" + mr.cache + "'"));
BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(wn = nth_kday_type::first);
}
} // week num
facet.get(sitr, stream_end, a_ios, wd); // day_of_week
extract_element(sitr, stream_end, of); // "of" element
facet.get(sitr, stream_end, a_ios, m); // month
return nth_kday_type(wn, wd, m);
}
//! returns first_kday_of_week parsed from stream
template<class facet_type>
first_kday_type
get_first_kday_type(stream_itr_type& sitr,
stream_itr_type& stream_end,
std::ios_base& a_ios,
const facet_type& facet) const
{
// skip leading whitespace
while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
day_of_week_type wd(0); // no default constructor
month_type m(1); // no default constructor
extract_element(sitr, stream_end, first); // "first" element
facet.get(sitr, stream_end, a_ios, wd); // day_of_week
extract_element(sitr, stream_end, of); // "of" element
facet.get(sitr, stream_end, a_ios, m); // month
return first_kday_type(wd, m);
}
//! returns last_kday_of_week parsed from stream
template<class facet_type>
last_kday_type
get_last_kday_type(stream_itr_type& sitr,
stream_itr_type& stream_end,
std::ios_base& a_ios,
const facet_type& facet) const
{
// skip leading whitespace
while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
day_of_week_type wd(0); // no default constructor
month_type m(1); // no default constructor
extract_element(sitr, stream_end, last); // "last" element
facet.get(sitr, stream_end, a_ios, wd); // day_of_week
extract_element(sitr, stream_end, of); // "of" element
facet.get(sitr, stream_end, a_ios, m); // month
return last_kday_type(wd, m);
}
//! returns first_kday_of_week parsed from stream
template<class facet_type>
kday_before_type
get_kday_before_type(stream_itr_type& sitr,
stream_itr_type& stream_end,
std::ios_base& a_ios,
const facet_type& facet) const
{
// skip leading whitespace
while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
day_of_week_type wd(0); // no default constructor
facet.get(sitr, stream_end, a_ios, wd); // day_of_week
extract_element(sitr, stream_end, before);// "before" element
return kday_before_type(wd);
}
//! returns first_kday_of_week parsed from stream
template<class facet_type>
kday_after_type
get_kday_after_type(stream_itr_type& sitr,
stream_itr_type& stream_end,
std::ios_base& a_ios,
const facet_type& facet) const
{
// skip leading whitespace
while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
day_of_week_type wd(0); // no default constructor
facet.get(sitr, stream_end, a_ios, wd); // day_of_week
extract_element(sitr, stream_end, after); // "after" element
return kday_after_type(wd);
}
private:
parse_tree_type m_element_strings;
//! Extracts phrase element from input. Throws ios_base::failure on error.
void extract_element(stream_itr_type& sitr,
stream_itr_type& stream_end,
typename date_generator_parser::phrase_elements ele) const
{
// skip leading whitespace
while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; }
match_results mr = m_element_strings.match(sitr, stream_end);
if(mr.current_match != ele) {
boost::throw_exception(std::ios_base::failure("Parse failed. No match found for '" + mr.cache + "'"));
}
}
};
template<class date_type, class CharT>
const typename date_generator_parser<date_type, CharT>::char_type
date_generator_parser<date_type, CharT>::first_string[6] =
{'f','i','r','s','t'};
template<class date_type, class CharT>
const typename date_generator_parser<date_type, CharT>::char_type
date_generator_parser<date_type, CharT>::second_string[7] =
{'s','e','c','o','n','d'};
template<class date_type, class CharT>
const typename date_generator_parser<date_type, CharT>::char_type
date_generator_parser<date_type, CharT>::third_string[6] =
{'t','h','i','r','d'};
template<class date_type, class CharT>
const typename date_generator_parser<date_type, CharT>::char_type
date_generator_parser<date_type, CharT>::fourth_string[7] =
{'f','o','u','r','t','h'};
template<class date_type, class CharT>
const typename date_generator_parser<date_type, CharT>::char_type
date_generator_parser<date_type, CharT>::fifth_string[6] =
{'f','i','f','t','h'};
template<class date_type, class CharT>
const typename date_generator_parser<date_type, CharT>::char_type
date_generator_parser<date_type, CharT>::last_string[5] =
{'l','a','s','t'};
template<class date_type, class CharT>
const typename date_generator_parser<date_type, CharT>::char_type
date_generator_parser<date_type, CharT>::before_string[8] =
{'b','e','f','o','r','e'};
template<class date_type, class CharT>
const typename date_generator_parser<date_type, CharT>::char_type
date_generator_parser<date_type, CharT>::after_string[6] =
{'a','f','t','e','r'};
template<class date_type, class CharT>
const typename date_generator_parser<date_type, CharT>::char_type
date_generator_parser<date_type, CharT>::of_string[3] =
{'o','f'};
} } //namespace
#endif // DATE_TIME_DATE_GENERATOR_PARSER_HPP__
+334 -102
View File
@@ -1,83 +1,191 @@
#ifndef DATE_TIME_DATE_GENERATORS_HPP__
#define DATE_TIME_DATE_GENERATORS_HPP__
/* Copyright (c) 2000 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
/*! @file date_generators.hpp
Definition and implementation of date algorithm templates
*/
#include "boost/date_time/date.hpp"
#include <sstream>
#include <stdexcept>
#include <boost/throw_exception.hpp>
#include <boost/date_time/date.hpp>
#include <boost/date_time/compiler_config.hpp>
namespace boost {
namespace date_time {
//! Generates a date by applying the year to the given month and day.
/*!
Example usage:
@code
partial_date pd(1, Jan);
date d = pd.get_date(2002); //2002-Jan-01
@endcode
\ingroup date_alg
*/
//! Base class for all generators that take a year and produce a date.
/*! This class is a base class for polymorphic function objects that take
a year and produce a concrete date.
@tparam date_type The type representing a date. This type must
export a calender_type which defines a year_type.
*/
template<class date_type>
class partial_date {
class year_based_generator
{
public:
typedef typename date_type::calendar_type calendar_type;
typedef typename calendar_type::day_type day_type;
typedef typename calendar_type::month_type month_type;
typedef typename calendar_type::year_type year_type;
typedef typename date_type::duration_type duration_type;
partial_date(day_type d, month_type m) :
day_(d),
month_(m)
{}
//! Return a concrete date when provided with a year specific year.
date_type get_date(year_type y) const
{
return date_type(y, month_, day_);
}
date_type operator()(year_type y) const
{
return date_type(y, month_, day_);
}
bool operator==(const partial_date& rhs) const
{
return (month_ == rhs.month_) && (day_ == rhs.day_);
}
bool operator<(const partial_date& rhs) const
{
if (month_ < rhs.month_) return true;
if (month_ > rhs.month_) return false;
//months are equal
return (day_ < rhs.day_);
}
private:
day_type day_;
month_type month_;
year_based_generator() {}
virtual ~year_based_generator() {}
virtual date_type get_date(year_type y) const = 0;
//! Returns a string for use in a POSIX time_zone string
virtual std::string to_string() const = 0;
};
//! Generates a date by applying the year to the given month and day.
/*!
Example usage:
@code
partial_date pd(1, Jan);
partial_date pd2(70);
date d = pd.get_date(2002); //2002-Jan-01
date d2 = pd2.get_date(2002); //2002-Mar-10
@endcode
\ingroup date_alg
*/
template<class date_type>
class partial_date : public year_based_generator<date_type>
{
public:
typedef typename date_type::calendar_type calendar_type;
typedef typename calendar_type::day_type day_type;
typedef typename calendar_type::month_type month_type;
typedef typename calendar_type::year_type year_type;
typedef typename date_type::duration_type duration_type;
typedef typename duration_type::duration_rep duration_rep;
partial_date(day_type d, month_type m) :
day_(d),
month_(m)
{}
//! Partial date created from number of days into year. Range 1-366
/*! Allowable values range from 1 to 366. 1=Jan1, 366=Dec31. If argument
* exceeds range, partial_date will be created with closest in-range value.
* 60 will always be Feb29, if get_date() is called with a non-leap year
* an exception will be thrown */
partial_date(duration_rep days) :
day_(1), // default values
month_(1)
{
date_type d1(2000,1,1);
if(days > 1) {
if(days > 366) // prevents wrapping
{
days = 366;
}
days = days - 1;
duration_type dd(days);
d1 = d1 + dd;
}
day_ = d1.day();
month_ = d1.month();
}
//! Return a concrete date when provided with a year specific year.
/*! Will throw an 'invalid_argument' exception if a partial_date object,
* instantiated with Feb-29, has get_date called with a non-leap year.
* Example:
* @code
* partial_date pd(29, Feb);
* pd.get_date(2003); // throws invalid_argument exception
* pg.get_date(2000); // returns 2000-2-29
* @endcode
*/
date_type get_date(year_type y) const BOOST_OVERRIDE
{
if((day_ == 29) && (month_ == 2) && !(calendar_type::is_leap_year(y))) {
std::ostringstream ss;
ss << "No Feb 29th in given year of " << y << ".";
boost::throw_exception(std::invalid_argument(ss.str()));
}
return date_type(y, month_, day_);
}
date_type operator()(year_type y) const
{
return get_date(y);
//return date_type(y, month_, day_);
}
bool operator==(const partial_date& rhs) const
{
return (month_ == rhs.month_) && (day_ == rhs.day_);
}
bool operator<(const partial_date& rhs) const
{
if (month_ < rhs.month_) return true;
if (month_ > rhs.month_) return false;
//months are equal
return (day_ < rhs.day_);
}
//! Useful generator functor for finding holidays
// added for streaming purposes
month_type month() const
{
return month_;
}
day_type day() const
{
return day_;
}
//! Returns string suitable for use in POSIX time zone string
/*! Returns string formatted with up to 3 digits:
* Jan-01 == "0"
* Feb-29 == "58"
* Dec-31 == "365" */
std::string to_string() const BOOST_OVERRIDE
{
std::ostringstream ss;
date_type d(2004, month_, day_);
unsigned short c = d.day_of_year();
c--; // numbered 0-365 while day_of_year is 1 based...
ss << c;
return ss.str();
}
private:
day_type day_;
month_type month_;
};
//! Returns nth arg as string. 1 -> "first", 2 -> "second", max is 5.
inline const char* nth_as_str(int ele)
{
static const char* const _nth_as_str[] = {"out of range", "first", "second",
"third", "fourth", "fifth"};
if(ele >= 1 && ele <= 5) {
return _nth_as_str[ele];
}
else {
return _nth_as_str[0];
}
}
//! Useful generator functor for finding holidays
/*! Based on the idea in Cal. Calc. for finding holidays that are
* the 'first Monday of September'.
* the 'first Monday of September'. When instantiated with
* 'fifth' kday of month, the result will be the last kday of month
* which can be the fourth or fifth depending on the structure of
* the month.
*
* The algorithm here basically guesses for the first
* day of the month. Then finds the first day of the correct
* type. That is, if the first of the month is a Tuesday
* and it needs Wenesday then we simply increment by a day
* and it needs Wednesday then we simply increment by a day
* and then we can add the length of a week until we get
* to the 'nth kday'. There are probably more efficient
* algorithms based on using a mod 7, but this one works
* to the 'nth kday'. There are probably more efficient
* algorithms based on using a mod 7, but this one works
* reasonably well for basic applications.
* \ingroup date_alg
*/
template<class date_type>
class nth_kday_of_month {
class nth_kday_of_month : public year_based_generator<date_type>
{
public:
typedef typename date_type::calendar_type calendar_type;
typedef typename calendar_type::day_of_week_type day_of_week_type;
@@ -93,7 +201,7 @@ namespace date_time {
dow_(dow)
{}
//! Return a concrete date when provided with a year specific year.
date_type get_date(year_type y) const
date_type get_date(year_type y) const BOOST_OVERRIDE
{
date_type d(y, month_, 1); //first day of month
duration_type one_day(1);
@@ -106,20 +214,53 @@ namespace date_time {
d = d + one_week;
week++;
}
// remove wrapping to next month behavior
if(d.month() != month_) {
d = d - one_week;
}
return d;
}
// added for streaming
month_type month() const
{
return month_;
}
week_num nth_week() const
{
return wn_;
}
day_of_week_type day_of_week() const
{
return dow_;
}
const char* nth_week_as_str() const
{
return nth_as_str(wn_);
}
//! Returns string suitable for use in POSIX time zone string
/*! Returns a string formatted as "M4.3.0" ==> 3rd Sunday in April. */
std::string to_string() const BOOST_OVERRIDE
{
std::ostringstream ss;
ss << 'M'
<< static_cast<int>(month_) << '.'
<< static_cast<int>(wn_) << '.'
<< static_cast<int>(dow_);
return ss.str();
}
private:
month_type month_;
week_num wn_;
day_of_week_type dow_;
};
//! Useful generator functor for finding holidays and daylight savings
//! Useful generator functor for finding holidays and daylight savings
/*! Similar to nth_kday_of_month, but requires less paramters
* \ingroup date_alg
*/
template<class date_type>
class first_kday_of_month {
class first_kday_of_month : public year_based_generator<date_type>
{
public:
typedef typename date_type::calendar_type calendar_type;
typedef typename calendar_type::day_of_week_type day_of_week_type;
@@ -128,14 +269,14 @@ namespace date_time {
typedef typename date_type::duration_type duration_type;
//!Specify the first 'Sunday' in 'April' spec
/*!@param dow The day of week, eg: Sunday, Monday, etc
* @param month The month of the year, eg: Jan, Feb, Mar, etc
*/
first_kday_of_month(day_of_week_type dow, month_type month) :
month_(month),
* @param m The month of the year, eg: Jan, Feb, Mar, etc
*/
first_kday_of_month(day_of_week_type dow, month_type m) :
month_(m),
dow_(dow)
{}
//! Return a concrete date when provided with a year specific year.
date_type get_date(year_type year) const
date_type get_date(year_type year) const BOOST_OVERRIDE
{
date_type d(year, month_,1);
duration_type one_day(1);
@@ -144,6 +285,26 @@ namespace date_time {
}
return d;
}
// added for streaming
month_type month() const
{
return month_;
}
day_of_week_type day_of_week() const
{
return dow_;
}
//! Returns string suitable for use in POSIX time zone string
/*! Returns a string formatted as "M4.1.0" ==> 1st Sunday in April. */
std::string to_string() const BOOST_OVERRIDE
{
std::ostringstream ss;
ss << 'M'
<< static_cast<int>(month_) << '.'
<< 1 << '.'
<< static_cast<int>(dow_);
return ss.str();
}
private:
month_type month_;
day_of_week_type dow_;
@@ -152,14 +313,15 @@ namespace date_time {
//! Calculate something like Last Sunday of January
/*! Useful generator functor for finding holidays and daylight savings
/*! Useful generator functor for finding holidays and daylight savings
* Get the last day of the month and then calculate the difference
* to the last previous day.
* @param date_type A date class that exports day_of_week, month_type, etc.
* @tparam date_type A date class that exports day_of_week, month_type, etc.
* \ingroup date_alg
*/
template<class date_type>
class last_kday_of_month {
class last_kday_of_month : public year_based_generator<date_type>
{
public:
typedef typename date_type::calendar_type calendar_type;
typedef typename calendar_type::day_of_week_type day_of_week_type;
@@ -168,14 +330,14 @@ namespace date_time {
typedef typename date_type::duration_type duration_type;
//!Specify the date spec like last 'Sunday' in 'April' spec
/*!@param dow The day of week, eg: Sunday, Monday, etc
* @param month The month of the year, eg: Jan, Feb, Mar, etc
*/
last_kday_of_month(day_of_week_type dow, month_type month) :
month_(month),
* @param m The month of the year, eg: Jan, Feb, Mar, etc
*/
last_kday_of_month(day_of_week_type dow, month_type m) :
month_(m),
dow_(dow)
{}
//! Return a concrete date when provided with a year specific year.
date_type get_date(year_type year) const
date_type get_date(year_type year) const BOOST_OVERRIDE
{
date_type d(year, month_, calendar_type::end_of_month_day(year,month_));
duration_type one_day(1);
@@ -184,23 +346,44 @@ namespace date_time {
}
return d;
}
// added for streaming
month_type month() const
{
return month_;
}
day_of_week_type day_of_week() const
{
return dow_;
}
//! Returns string suitable for use in POSIX time zone string
/*! Returns a string formatted as "M4.5.0" ==> last Sunday in April. */
std::string to_string() const BOOST_OVERRIDE
{
std::ostringstream ss;
ss << 'M'
<< static_cast<int>(month_) << '.'
<< 5 << '.'
<< static_cast<int>(dow_);
return ss.str();
}
private:
month_type month_;
day_of_week_type dow_;
};
};
//! Calculate something like "First Sunday after Jan 1,2002
/*! Date generator that takes a date and finds kday after
*@code
typedef boost::date_time::first_kday_after<date> firstkdayafter;
firstkdayafter fkaf(Monday);
fkaf.get_date(date(2002,Feb,1));
@endcode
typedef boost::date_time::first_kday_after<date> firstkdayafter;
firstkdayafter fkaf(Monday);
fkaf.get_date(date(2002,Feb,1));
@endcode
* \ingroup date_alg
*/
template<class date_type>
class first_kday_after {
class first_kday_after
{
public:
typedef typename date_type::calendar_type calendar_type;
typedef typename calendar_type::day_of_week_type day_of_week_type;
@@ -218,7 +401,11 @@ namespace date_time {
}
return d;
}
// added for streaming
day_of_week_type day_of_week() const
{
return dow_;
}
private:
day_of_week_type dow_;
};
@@ -226,14 +413,15 @@ namespace date_time {
//! Calculate something like "First Sunday before Jan 1,2002
/*! Date generator that takes a date and finds kday after
*@code
typedef boost::date_time::first_kday_before<date> firstkdaybefore;
firstkdaybefore fkbf(Monday);
fkbf.get_date(date(2002,Feb,1));
@endcode
typedef boost::date_time::first_kday_before<date> firstkdaybefore;
firstkdaybefore fkbf(Monday);
fkbf.get_date(date(2002,Feb,1));
@endcode
* \ingroup date_alg
*/
template<class date_type>
class first_kday_before {
class first_kday_before
{
public:
typedef typename date_type::calendar_type calendar_type;
typedef typename calendar_type::day_of_week_type day_of_week_type;
@@ -251,32 +439,76 @@ namespace date_time {
}
return d;
}
// added for streaming
day_of_week_type day_of_week() const
{
return dow_;
}
private:
day_of_week_type dow_;
};
//! Calculates the number of days until the next weekday
/*! Calculates the number of days until the next weekday.
* If the date given falls on a Sunday and the given weekday
* is Tuesday the result will be 2 days */
template<typename date_type, class weekday_type>
inline
typename date_type::duration_type days_until_weekday(const date_type& d, const weekday_type& wd)
{
typedef typename date_type::duration_type duration_type;
duration_type wks(0);
duration_type dd(wd.as_number() - d.day_of_week().as_number());
if(dd.is_negative()){
wks = duration_type(7);
}
return dd + wks;
}
//! Calculates the number of days since the previous weekday
/*! Calculates the number of days since the previous weekday
* If the date given falls on a Sunday and the given weekday
* is Tuesday the result will be 5 days. The answer will be a positive
* number because Tuesday is 5 days before Sunday, not -5 days before. */
template<typename date_type, class weekday_type>
inline
typename date_type::duration_type days_before_weekday(const date_type& d, const weekday_type& wd)
{
typedef typename date_type::duration_type duration_type;
duration_type wks(0);
duration_type dd(wd.as_number() - d.day_of_week().as_number());
if(dd.days() > 0){
wks = duration_type(7);
}
// we want a number of days, not an offset. The value returned must
// be zero or larger.
return (-dd + wks);
}
//! Generates a date object representing the date of the following weekday from the given date
/*! Generates a date object representing the date of the following
* weekday from the given date. If the date given is 2004-May-9
* (a Sunday) and the given weekday is Tuesday then the resulting date
* will be 2004-May-11. */
template<class date_type, class weekday_type>
inline
date_type next_weekday(const date_type& d, const weekday_type& wd)
{
return d + days_until_weekday(d, wd);
}
//! Generates a date object representing the date of the previous weekday from the given date
/*! Generates a date object representing the date of the previous
* weekday from the given date. If the date given is 2004-May-9
* (a Sunday) and the given weekday is Tuesday then the resulting date
* will be 2004-May-4. */
template<class date_type, class weekday_type>
inline
date_type previous_weekday(const date_type& d, const weekday_type& wd)
{
return d - days_before_weekday(d, wd);
}
} } //namespace date_time
/*
* Copyright (c) 2001
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided as is without express or implied warranty.
*
*
* Author: Jeff Garland (jeff@CrystalClearSoftware.com)
* Created: Sun Sep 9 17:20:39 2001
*
*/
#endif
+36 -33
View File
@@ -1,8 +1,12 @@
#ifndef DATE_ITERATOR_HPP___
#define DATE_ITERATOR_HPP___
/* Copyright (c) 2000 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include <iterator>
@@ -28,7 +32,7 @@ namespace date_time {
template<class date_type>
class date_itr_base {
// works, but benefit unclear at the moment
// class date_itr_base : public std::iterator<std::input_iterator_tag,
// class date_itr_base : public std::iterator<std::input_iterator_tag,
// date_type, void, void, void>{
public:
typedef typename date_type::duration_type duration_type;
@@ -36,25 +40,31 @@ namespace date_time {
typedef std::input_iterator_tag iterator_category;
date_itr_base(date_type d) : current_(d) {}
virtual ~date_itr_base() {};
date_itr_base& operator++()
virtual ~date_itr_base() {}
date_itr_base& operator++()
{
current_ = current_ + get_offset(current_);
return *this;
};
}
date_itr_base& operator--()
{
current_ = current_ + get_neg_offset(current_);
return *this;
}
virtual duration_type get_offset(const date_type& current) const=0;
date_type operator*() {return current_;};
date_type* operator->() {return &current_;};
bool operator< (const date_type& d) {return current_ < d;}
bool operator<= (const date_type& d) {return current_ <= d;}
bool operator> (const date_type& d) {return current_ > d;}
bool operator>= (const date_type& d) {return current_ >= d;}
bool operator== (const date_type& d) {return current_ == d;}
bool operator!= (const date_type& d) {return current_ != d;}
virtual duration_type get_neg_offset(const date_type& current) const=0;
const date_type& operator*() const {return current_;}
const date_type* operator->() const {return &current_;}
bool operator< (const date_type& d) const {return current_ < d;}
bool operator<= (const date_type& d) const {return current_ <= d;}
bool operator> (const date_type& d) const {return current_ > d;}
bool operator>= (const date_type& d) const {return current_ >= d;}
bool operator== (const date_type& d) const {return current_ == d;}
bool operator!= (const date_type& d) const {return current_ != d;}
private:
date_type current_;
};
//! Overrides the base date iterator providing hook for functors
/*
* <b>offset_functor</b>
@@ -67,32 +77,25 @@ namespace date_time {
class date_itr : public date_itr_base<date_type> {
public:
typedef typename date_type::duration_type duration_type;
date_itr(date_type d, int factor=1) :
date_itr_base<date_type>(d),
of_(factor)
date_itr(date_type d, int factor=1) :
date_itr_base<date_type>(d),
of_(factor)
{}
private:
virtual duration_type get_offset(const date_type& current) const
{
return of_.get_offset(current);
}
private:
virtual duration_type get_neg_offset(const date_type& current) const
{
return of_.get_neg_offset(current);
}
offset_functor of_;
};
} } //namespace date_time
/* Copyright (c) 2000, 2001
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
#endif
+114 -79
View File
@@ -1,18 +1,24 @@
#ifndef DATE_TIME_DATE_NAMES_PUT_HPP___
#define DATE_TIME_DATE_NAMES_PUT_HPP___
/* Copyright (c) 2002 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002-2005 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include "boost/date_time/locale_config.hpp" // set BOOST_DATE_TIME_NO_LOCALE
#include <boost/date_time/locale_config.hpp> // set BOOST_DATE_TIME_NO_LOCALE
#ifndef BOOST_DATE_TIME_NO_LOCALE
#include "boost/date_time/special_defs.hpp"
#include "boost/date_time/date_defs.hpp"
#include "boost/date_time/parse_format_base.hpp"
#include <boost/date_time/compiler_config.hpp>
#include <boost/date_time/special_defs.hpp>
#include <boost/date_time/date_defs.hpp>
#include <boost/date_time/parse_format_base.hpp>
#include <boost/lexical_cast.hpp>
#include <locale>
@@ -22,22 +28,22 @@ namespace date_time {
//! Output facet base class for gregorian dates.
/*! This class is a base class for date facets used to localize the
* names of months and the names of days in the week.
*
*
* Requirements of Config
* - define an enumeration month_enum that enumerates the months.
* - define an enumeration month_enum that enumerates the months.
* The enumeration should be '1' based eg: Jan==1
* - define as_short_string and as_long_string
*
* (see langer & kreft p334).
*
*
*/
template<class Config,
class charT = char,
class charT = char,
class OutputIterator = std::ostreambuf_iterator<charT> >
class date_names_put : public std::locale::facet
class BOOST_SYMBOL_VISIBLE date_names_put : public std::locale::facet
{
public:
date_names_put() {};
date_names_put() {}
typedef OutputIterator iter_type;
typedef typename Config::month_type month_type;
typedef typename Config::month_enum month_enum;
@@ -45,8 +51,16 @@ namespace date_time {
typedef typename Config::special_value_enum special_value_enum;
//typedef typename Config::format_type format_type;
typedef std::basic_string<charT> string_type;
typedef charT char_type;
static const char_type default_special_value_names[3][17];
static const char_type separator[2];
static std::locale::id id;
#if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
std::locale::id& __get_id (void) const { return id; }
#endif
void put_special_value(iter_type& oitr, special_value_enum sv) const
{
do_put_special_value(oitr, sv);
@@ -101,41 +115,29 @@ namespace date_time {
virtual void do_put_month_short(iter_type& oitr, month_enum moy) const
{
month_type gm(moy);
put_string(oitr, gm.as_short_string());
charT c = '\0';
put_string(oitr, gm.as_short_string(c));
}
//! Default facet implementation uses month_type defaults
virtual void do_put_month_long(iter_type& oitr,
virtual void do_put_month_long(iter_type& oitr,
month_enum moy) const
{
month_type gm(moy);
put_string(oitr, gm.as_long_string());
charT c = '\0';
put_string(oitr, gm.as_long_string(c));
}
//! Default facet implementation for special value types
virtual void do_put_special_value(iter_type& oitr, special_value_enum sv) const
{
switch (sv) {
case not_a_date_time:
{
put_string(oitr, "not-a-date-time");
break;
}
case pos_infin:
{
put_string(oitr, "+infinity");
break;
}
case neg_infin:
{
put_string(oitr, "-infinity");
break;
}
default: {} //quiet compilers that want all cases covered here (eg: gcc 3.1)
if(sv <= 2) { // only output not_a_date_time, neg_infin, or pos_infin
string_type s(default_special_value_names[sv]);
put_string(oitr, s);
}
}
virtual void do_put_weekday_short(iter_type& oitr, weekday_enum wd) const
virtual void do_put_weekday_short(iter_type&, weekday_enum) const
{
}
virtual void do_put_weekday_long(iter_type& oitr, weekday_enum wd) const
virtual void do_put_weekday_long(iter_type&, weekday_enum) const
{
}
virtual bool do_has_date_sep_chars() const
@@ -144,19 +146,22 @@ namespace date_time {
}
virtual void do_year_sep_char(iter_type& oitr) const
{
put_string(oitr, "-");
string_type s(separator);
put_string(oitr, s);
}
//! char between year-month
virtual void do_month_sep_char(iter_type& oitr) const
{
put_string(oitr, "-");
string_type s(separator);
put_string(oitr, s);
}
//! Char to separate month-day
virtual void do_day_sep_char(iter_type& oitr) const
{
put_string(oitr, "-");
string_type s(separator); //put in '-'
put_string(oitr, s);
}
//! Default for date order
//! Default for date order
virtual ymd_order_spec do_date_order() const
{
return ymd_order_iso;
@@ -166,33 +171,53 @@ namespace date_time {
{
return month_as_short_string;
}
void put_string(iter_type& oi, const char* const s) const
void put_string(iter_type& oi, const charT* const s) const
{
string_type s1(s);
string_type s1(boost::lexical_cast<string_type>(s));
typename string_type::iterator si,end;
for (si=s1.begin(), end=s1.end(); si!=end; si++, oi++) {
*oi = *si;
}
}
void put_string(iter_type& oi, const string_type& s1) const
{
typename string_type::const_iterator si,end;
for (si=s1.begin(), end=s1.end(); si!=end; si++, oi++) {
*oi = *si;
}
}
};
//! Generate storage location for a std::locale::id
template<class Config, class charT, class OutputIterator>
const typename date_names_put<Config, charT, OutputIterator>::char_type
date_names_put<Config, charT, OutputIterator>::default_special_value_names[3][17] = {
{'n','o','t','-','a','-','d','a','t','e','-','t','i','m','e'},
{'-','i','n','f','i','n','i','t','y'},
{'+','i','n','f','i','n','i','t','y'} };
template<class Config, class charT, class OutputIterator>
const typename date_names_put<Config, charT, OutputIterator>::char_type
date_names_put<Config, charT, OutputIterator>::separator[2] =
{'-', '\0'} ;
//! Generate storage location for a std::locale::id
template<class Config, class charT, class OutputIterator>
std::locale::id date_names_put<Config, charT, OutputIterator>::id;
//! An date name output facet that takes an array of char* to define strings
//! A date name output facet that takes an array of char* to define strings
template<class Config,
class charT = char,
class charT = char,
class OutputIterator = std::ostreambuf_iterator<charT> >
class all_date_names_put : public date_names_put<Config, charT, OutputIterator>
class BOOST_SYMBOL_VISIBLE all_date_names_put : public date_names_put<Config, charT, OutputIterator>
{
public:
all_date_names_put(const char* const month_short_names[],
const char* const month_long_names[],
const char* const special_value_names[],
const char* const weekday_short_names[],
const char* const weekday_long_names[],
char separator_char = '-',
all_date_names_put(const charT* const month_short_names[],
const charT* const month_long_names[],
const charT* const special_value_names[],
const charT* const weekday_short_names[],
const charT* const weekday_long_names[],
charT separator_char = '-',
ymd_order_spec order_spec = ymd_order_iso,
month_format_spec month_format = month_as_short_string) :
month_short_names_(month_short_names),
@@ -206,45 +231,66 @@ namespace date_time {
separator_char_[0] = separator_char;
separator_char_[1] = '\0';
};
}
typedef OutputIterator iter_type;
typedef typename Config::month_enum month_enum;
typedef typename Config::weekday_enum weekday_enum;
typedef typename Config::special_value_enum special_value_enum;
const charT* const* get_short_month_names() const
{
return month_short_names_;
}
const charT* const* get_long_month_names() const
{
return month_long_names_;
}
const charT* const* get_special_value_names() const
{
return special_value_names_;
}
const charT* const* get_short_weekday_names()const
{
return weekday_short_names_;
}
const charT* const* get_long_weekday_names()const
{
return weekday_long_names_;
}
protected:
//! Generic facet that takes array of chars
virtual void do_put_month_short(iter_type& oitr, month_enum moy) const
{
put_string(oitr, month_short_names_[moy-1]);
this->put_string(oitr, month_short_names_[moy-1]);
}
//! Long month names
//! Long month names
virtual void do_put_month_long(iter_type& oitr, month_enum moy) const
{
put_string(oitr, month_long_names_[moy-1]);
this->put_string(oitr, month_long_names_[moy-1]);
}
//! Special values names
virtual void do_put_special_value(iter_type& oitr, special_value_enum sv) const
{
put_string(oitr, special_value_names_[sv]);
this->put_string(oitr, special_value_names_[sv]);
}
virtual void do_put_weekday_short(iter_type& oitr, weekday_enum wd) const
{
put_string(oitr, weekday_short_names_[wd]);
this->put_string(oitr, weekday_short_names_[wd]);
}
virtual void do_put_weekday_long(iter_type& oitr, weekday_enum wd) const
{
put_string(oitr, weekday_long_names_[wd]);
this->put_string(oitr, weekday_long_names_[wd]);
}
//! char between year-month
virtual void do_month_sep_char(iter_type& oitr) const
{
put_string(oitr, separator_char_);
this->put_string(oitr, separator_char_);
}
//! Char to separate month-day
virtual void do_day_sep_char(iter_type& oitr) const
{
put_string(oitr, separator_char_);
this->put_string(oitr, separator_char_);
}
//! Set the date ordering
virtual ymd_order_spec do_date_order() const
@@ -258,29 +304,18 @@ namespace date_time {
}
private:
const char* const* month_short_names_;
const char* const* month_long_names_;
const char* const* special_value_names_;
const char* const* weekday_short_names_;
const char* const* weekday_long_names_;
char separator_char_[2];
const charT* const* month_short_names_;
const charT* const* month_long_names_;
const charT* const* special_value_names_;
const charT* const* weekday_short_names_;
const charT* const* weekday_long_names_;
charT separator_char_[2];
ymd_order_spec order_spec_;
month_format_spec month_format_spec_;
month_format_spec month_format_spec_;
};
} } //namespace boost::date_time
#endif //BOOST_NO_STD_LOCALE
/* Copyright (c) 2002
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
#endif
+320 -81
View File
@@ -1,103 +1,342 @@
#ifndef _DATE_TIME_DATE_PARSING_HPP___
#define _DATE_TIME_DATE_PARSING_HPP___
/* Copyright (c) 2002 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include "boost/tokenizer.hpp"
#include "boost/lexical_cast.hpp"
#include <map>
#include <string>
#include <sstream>
#include <iterator>
#include <algorithm>
#include <boost/tokenizer.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/date_time/compiler_config.hpp>
#include <boost/date_time/parse_format_base.hpp>
#include <boost/date_time/period.hpp>
#if defined(BOOST_DATE_TIME_NO_LOCALE)
#include <cctype> // ::tolower(int)
#else
#include <locale> // std::tolower(char, locale)
#endif
namespace boost {
namespace date_time {
//! Generic function to parse a delimited date (eg: 2002-02-10)
template<class date_type>
date_type
parse_date(const std::string& s)
//! A function to replace the std::transform( , , ,tolower) construct
/*! This function simply takes a string, and changes all the characters
* in that string to lowercase (according to the default system locale).
* In the event that a compiler does not support locales, the old
* C style tolower() is used.
*/
inline
std::string
convert_to_lower(std::string inp)
{
typedef typename date_type::year_type year_type;
int pos = 0;
typename date_type::ymd_type ymd(year_type::min(),1,1);
boost::tokenizer<boost::char_delimiters_separator<char> > tok(s);
for(boost::tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
int i = boost::lexical_cast<int>(*beg);
switch(pos) {
case 0: ymd.year = i; break;
case 1: ymd.month = i; break;
case 2: ymd.day = i; break;
};
pos++;
#if !defined(BOOST_DATE_TIME_NO_LOCALE)
const std::locale loc(std::locale::classic());
#endif
std::string::size_type i = 0, n = inp.length();
for (; i < n; ++i) {
inp[i] =
#if defined(BOOST_DATE_TIME_NO_LOCALE)
static_cast<char>(std::tolower(inp[i]));
#else
// tolower and others were brought in to std for borland >= v564
// in compiler_config.hpp
std::tolower(inp[i], loc);
#endif
}
return date_type(ymd);
return inp;
}
//! Generic function to parse undelimited date (eg: 20020201)
template<class date_type>
date_type
parse_undelimited_date(const std::string& s)
{
int offsets[] = {4,2,2};
int pos = 0;
typedef typename date_type::year_type year_type;
typename date_type::ymd_type ymd(year_type::min(),1,1);
boost::offset_separator osf(offsets, offsets+3);
boost::tokenizer<boost::offset_separator> tok(s, osf);
for(boost::tokenizer<boost::offset_separator>::iterator ti=tok.begin(); ti!=tok.end();++ti){
int i = boost::lexical_cast<int>(*ti);
// std::cout << i << std::endl;
switch(pos) {
case 0: ymd.year = i; break;
case 1: ymd.month = i; break;
case 2: ymd.day = i; break;
};
pos++;
}
return date_type(ymd);
}
template<class date_type>
date_type
parse_date2(const std::string& s)
{
//using namespace boost;
int pos = 0;
typedef typename date_type::year_type year_type;
typename date_type::ymd_type ymd(year_type::min(),1,1);
boost::char_delimiters_separator<char> delim("DT");
boost::tokenizer<boost::char_delimiters_separator<char> > tok(s);
for(boost::tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
int i = boost::lexical_cast<int>(*beg);
switch(pos) {
case 0: ymd.year = i; break;
case 1: ymd.month = i; break;
case 2: ymd.day = i; break;
};
pos++;
//! Helper function for parse_date.
template<class month_type>
inline unsigned short
month_str_to_ushort(std::string const& s) {
if((s.at(0) >= '0') && (s.at(0) <= '9')) {
return boost::lexical_cast<unsigned short>(s);
}
else {
std::string str = convert_to_lower(s);
//c++98 support
#if defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
static std::map<std::string, unsigned short> month_map;
typedef std::map<std::string, unsigned short>::value_type vtype;
if( month_map.empty() ) {
month_map.insert( vtype("jan", static_cast<unsigned short>(1)) );
month_map.insert( vtype("january", static_cast<unsigned short>(1)) );
month_map.insert( vtype("feb", static_cast<unsigned short>(2)) );
month_map.insert( vtype("february", static_cast<unsigned short>(2)) );
month_map.insert( vtype("mar", static_cast<unsigned short>(3)) );
month_map.insert( vtype("march", static_cast<unsigned short>(3)) );
month_map.insert( vtype("apr", static_cast<unsigned short>(4)) );
month_map.insert( vtype("april", static_cast<unsigned short>(4)) );
month_map.insert( vtype("may", static_cast<unsigned short>(5)) );
month_map.insert( vtype("jun", static_cast<unsigned short>(6)) );
month_map.insert( vtype("june", static_cast<unsigned short>(6)) );
month_map.insert( vtype("jul", static_cast<unsigned short>(7)) );
month_map.insert( vtype("july", static_cast<unsigned short>(7)) );
month_map.insert( vtype("aug", static_cast<unsigned short>(8)) );
month_map.insert( vtype("august", static_cast<unsigned short>(8)) );
month_map.insert( vtype("sep", static_cast<unsigned short>(9)) );
month_map.insert( vtype("september", static_cast<unsigned short>(9)) );
month_map.insert( vtype("oct", static_cast<unsigned short>(10)) );
month_map.insert( vtype("october", static_cast<unsigned short>(10)) );
month_map.insert( vtype("nov", static_cast<unsigned short>(11)) );
month_map.insert( vtype("november", static_cast<unsigned short>(11)) );
month_map.insert( vtype("dec", static_cast<unsigned short>(12)) );
month_map.insert( vtype("december", static_cast<unsigned short>(12)) );
}
#else //c+11 and beyond
static std::map<std::string, unsigned short> month_map =
{ { "jan", static_cast<unsigned short>(1) }, { "january", static_cast<unsigned short>(1) },
{ "feb", static_cast<unsigned short>(2) }, { "february", static_cast<unsigned short>(2) },
{ "mar", static_cast<unsigned short>(3) }, { "march", static_cast<unsigned short>(3) },
{ "apr", static_cast<unsigned short>(4) }, { "april", static_cast<unsigned short>(4) },
{ "may", static_cast<unsigned short>(5) },
{ "jun", static_cast<unsigned short>(6) }, { "june", static_cast<unsigned short>(6) },
{ "jul", static_cast<unsigned short>(7) }, { "july", static_cast<unsigned short>(7) },
{ "aug", static_cast<unsigned short>(8) }, { "august", static_cast<unsigned short>(8) },
{ "sep", static_cast<unsigned short>(9) }, { "september", static_cast<unsigned short>(9) },
{ "oct", static_cast<unsigned short>(10) }, { "october", static_cast<unsigned short>(10)},
{ "nov", static_cast<unsigned short>(11) }, { "november", static_cast<unsigned short>(11)},
{ "dec", static_cast<unsigned short>(12) }, { "december", static_cast<unsigned short>(12)}
};
#endif
std::map<std::string, unsigned short>::const_iterator mitr = month_map.find( str );
if ( mitr != month_map.end() ) {
return mitr->second;
}
}
return 13; // intentionally out of range - name not found
}
return date_type(ymd);
}
//! Generic function to parse a delimited date (eg: 2002-02-10)
/*! Accepted formats are: "2003-02-10" or " 2003-Feb-10" or
* "2003-Feburary-10"
* The order in which the Month, Day, & Year appear in the argument
* string can be accomodated by passing in the appropriate ymd_order_spec
*/
template<class date_type>
date_type
parse_date(const std::string& s, int order_spec = ymd_order_iso) {
std::string spec_str;
if(order_spec == ymd_order_iso) {
spec_str = "ymd";
}
else if(order_spec == ymd_order_dmy) {
spec_str = "dmy";
}
else { // (order_spec == ymd_order_us)
spec_str = "mdy";
}
typedef typename date_type::month_type month_type;
unsigned pos = 0;
unsigned short year(0), month(0), day(0);
typedef typename std::basic_string<char>::traits_type traits_type;
typedef boost::char_separator<char, traits_type> char_separator_type;
typedef boost::tokenizer<char_separator_type,
std::basic_string<char>::const_iterator,
std::basic_string<char> > tokenizer;
typedef boost::tokenizer<char_separator_type,
std::basic_string<char>::const_iterator,
std::basic_string<char> >::iterator tokenizer_iterator;
// may need more delimiters, these work for the regression tests
const char sep_char[] = {',','-','.',' ','/','\0'};
char_separator_type sep(sep_char);
tokenizer tok(s,sep);
for(tokenizer_iterator beg=tok.begin();
beg!=tok.end() && pos < spec_str.size();
++beg, ++pos) {
switch(spec_str.at(pos)) {
case 'y':
{
year = boost::lexical_cast<unsigned short>(*beg);
break;
}
case 'm':
{
month = month_str_to_ushort<month_type>(*beg);
break;
}
case 'd':
{
day = boost::lexical_cast<unsigned short>(*beg);
break;
}
default: break;
} //switch
}
return date_type(year, month, day);
}
//! Generic function to parse undelimited date (eg: 20020201)
template<class date_type>
date_type
parse_undelimited_date(const std::string& s) {
int offsets[] = {4,2,2};
int pos = 0;
//typename date_type::ymd_type ymd((year_type::min)(),1,1);
unsigned short y = 0, m = 0, d = 0;
/* The two bool arguments state that parsing will not wrap
* (only the first 8 characters will be parsed) and partial
* strings will not be parsed.
* Ex:
* "2005121" will parse 2005 & 12, but not the "1" */
boost::offset_separator osf(offsets, offsets+3, false, false);
typedef typename boost::tokenizer<boost::offset_separator,
std::basic_string<char>::const_iterator,
std::basic_string<char> > tokenizer_type;
tokenizer_type tok(s, osf);
for(typename tokenizer_type::iterator ti=tok.begin(); ti!=tok.end();++ti) {
unsigned short i = boost::lexical_cast<unsigned short>(*ti);
switch(pos) {
case 0: y = i; break;
case 1: m = i; break;
case 2: d = i; break;
default: break;
}
pos++;
}
return date_type(y,m,d);
}
//! Helper function for 'date gregorian::from_stream()'
/*! Creates a string from the iterators that reference the
* begining & end of a char[] or string. All elements are
* used in output string */
template<class date_type, class iterator_type>
inline
date_type
from_stream_type(iterator_type& beg,
iterator_type const& end,
char)
{
std::ostringstream ss;
while(beg != end) {
ss << *beg++;
}
return parse_date<date_type>(ss.str());
}
//! Helper function for 'date gregorian::from_stream()'
/*! Returns the first string found in the stream referenced by the
* begining & end iterators */
template<class date_type, class iterator_type>
inline
date_type
from_stream_type(iterator_type& beg,
iterator_type const& /* end */,
std::string const&)
{
return parse_date<date_type>(*beg);
}
/* I believe the wchar stuff would be best elsewhere, perhaps in
* parse_date<>()? In the mean time this gets us started... */
//! Helper function for 'date gregorian::from_stream()'
/*! Creates a string from the iterators that reference the
* begining & end of a wstring. All elements are
* used in output string */
template<class date_type, class iterator_type>
inline
date_type from_stream_type(iterator_type& beg,
iterator_type const& end,
wchar_t)
{
std::ostringstream ss;
#if !defined(BOOST_DATE_TIME_NO_LOCALE)
std::locale loc;
std::ctype<wchar_t> const& fac = std::use_facet<std::ctype<wchar_t> >(loc);
while(beg != end) {
ss << fac.narrow(*beg++, 'X'); // 'X' will cause exception to be thrown
}
#else
while(beg != end) {
char c = 'X'; // 'X' will cause exception to be thrown
const wchar_t wc = *beg++;
if (wc >= 0 && wc <= 127)
c = static_cast< char >(wc);
ss << c;
}
#endif
return parse_date<date_type>(ss.str());
}
#ifndef BOOST_NO_STD_WSTRING
//! Helper function for 'date gregorian::from_stream()'
/*! Creates a string from the first wstring found in the stream
* referenced by the begining & end iterators */
template<class date_type, class iterator_type>
inline
date_type
from_stream_type(iterator_type& beg,
iterator_type const& /* end */,
std::wstring const&) {
std::wstring ws = *beg;
std::ostringstream ss;
std::wstring::iterator wsb = ws.begin(), wse = ws.end();
#if !defined(BOOST_DATE_TIME_NO_LOCALE)
std::locale loc;
std::ctype<wchar_t> const& fac = std::use_facet<std::ctype<wchar_t> >(loc);
while(wsb != wse) {
ss << fac.narrow(*wsb++, 'X'); // 'X' will cause exception to be thrown
}
#else
while(wsb != wse) {
char c = 'X'; // 'X' will cause exception to be thrown
const wchar_t wc = *wsb++;
if (wc >= 0 && wc <= 127)
c = static_cast< char >(wc);
ss << c;
}
#endif
return parse_date<date_type>(ss.str());
}
#endif // BOOST_NO_STD_WSTRING
#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
// This function cannot be compiled with MSVC 6.0 due to internal compiler shorcomings
#else
//! function called by wrapper functions: date_period_from_(w)string()
template<class date_type, class charT>
period<date_type, typename date_type::duration_type>
from_simple_string_type(const std::basic_string<charT>& s){
typedef typename std::basic_string<charT>::traits_type traits_type;
typedef typename boost::char_separator<charT, traits_type> char_separator;
typedef typename boost::tokenizer<char_separator,
typename std::basic_string<charT>::const_iterator,
std::basic_string<charT> > tokenizer;
const charT sep_list[4] = {'[','/',']','\0'};
char_separator sep(sep_list);
tokenizer tokens(s, sep);
typename tokenizer::iterator tok_it = tokens.begin();
std::basic_string<charT> date_string = *tok_it;
// get 2 string iterators and generate a date from them
typename std::basic_string<charT>::iterator date_string_start = date_string.begin(),
date_string_end = date_string.end();
typedef typename std::iterator_traits<typename std::basic_string<charT>::iterator>::value_type value_type;
date_type d1 = from_stream_type<date_type>(date_string_start, date_string_end, value_type());
date_string = *(++tok_it); // next token
date_string_start = date_string.begin(), date_string_end = date_string.end();
date_type d2 = from_stream_type<date_type>(date_string_start, date_string_end, value_type());
return period<date_type, typename date_type::duration_type>(d1, d2);
}
#endif
} } //namespace date_time
/* Copyright (c) 2002
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
#endif
+112 -75
View File
@@ -1,8 +1,12 @@
#ifndef DATE_TIME_DST_RULES_HPP__
#define DATE_TIME_DST_RULES_HPP__
/* Copyright (c) 2002 CrystalClear Software, Inc.
* Disclaimer & Full Copyright at end of file
* Author: Jeff Garland
/* Copyright (c) 2002,2003, 2007 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
/*! @file dst_rules.hpp
@@ -17,12 +21,12 @@
namespace boost {
namespace date_time {
enum time_is_dst_result {is_not_in_dst, is_in_dst,
enum time_is_dst_result {is_not_in_dst, is_in_dst,
ambiguous, invalid_time_label};
//! Dynamic class used to caluclate dst transition information
template<class date_type_,
template<class date_type_,
class time_duration_type_>
class dst_calculator
{
@@ -33,14 +37,14 @@ namespace boost {
//! Check the local time offset when on dst start day
/*! On this dst transition, the time label between
* the transition boundary and the boudary + the offset
* are invalid times. If before the boundary then still
* not in dst.
* are invalid times. If before the boundary then still
* not in dst.
*@param time_of_day Time offset in the day for the local time
*@param dst_start_offset_minutes Local day offset for start of dst
*@param dst_length_minutes Number of minutes to adjust clock forward
*@retval status of time label w.r.t. dst
*/
static time_is_dst_result
static time_is_dst_result
process_local_dst_start_day(const time_duration_type& time_of_day,
unsigned int dst_start_offset_minutes,
long dst_length_minutes)
@@ -53,19 +57,19 @@ namespace boost {
if (time_of_day >= time_duration_type(0,offset,0)) {
return is_in_dst;
}
return invalid_time_label;
return invalid_time_label;
}
//! Check the local time offset when on the last day of dst
/*! This is the calculation for the DST end day. On that day times
* prior to the conversion time - dst_length (1 am in US) are still
* in dst. Times between the above and the switch time are
* prior to the conversion time - dst_length (1 am in US) are still
* in dst. Times between the above and the switch time are
* ambiguous. Times after the start_offset are not in dst.
*@param time_of_day Time offset in the day for the local time
*@param dst_end_offset_minutes Local time of day for end of dst
*@retval status of time label w.r.t. dst
*/
static time_is_dst_result
static time_is_dst_result
process_local_dst_end_day(const time_duration_type& time_of_day,
unsigned int dst_end_offset_minutes,
long dst_length_minutes)
@@ -82,20 +86,54 @@ namespace boost {
}
//! Calculates if the given local time is dst or not
/*! Determines if the time is really in DST or not. Also checks for
/*! Determines if the time is really in DST or not. Also checks for
* invalid and ambiguous.
* @param current_day The day to check for dst
* @param time_of_day Time offset within the day to check
* @param time_of_day Time offset within the day to check
* @param dst_start_day Starting day of dst for the given locality
* @param dst_start_offset_minutes Offset within day for dst
* @param dst_start_offset Time offset within day for dst boundary
* @param dst_end_day Ending day of dst for the given locality
* @param dst_end_offset Time offset within day given in dst for dst boundary
* @param dst_length_minutes length of dst adjusment
* @retval The time is either ambiguous, invalid, in dst, or not in dst
*/
static time_is_dst_result
local_is_dst(const date_type& current_day,
const time_duration_type& time_of_day,
const date_type& dst_start_day,
const time_duration_type& dst_start_offset,
const date_type& dst_end_day,
const time_duration_type& dst_end_offset,
const time_duration_type& dst_length)
{
unsigned int start_minutes = static_cast<unsigned>(
dst_start_offset.hours() * 60 + dst_start_offset.minutes());
unsigned int end_minutes = static_cast<unsigned>(
dst_end_offset.hours() * 60 + dst_end_offset.minutes());
long length_minutes = static_cast<long>(
dst_length.hours() * 60 + dst_length.minutes());
return local_is_dst(current_day, time_of_day,
dst_start_day, start_minutes,
dst_end_day, end_minutes,
length_minutes);
}
//! Calculates if the given local time is dst or not
/*! Determines if the time is really in DST or not. Also checks for
* invalid and ambiguous.
* @param current_day The day to check for dst
* @param time_of_day Time offset within the day to check
* @param dst_start_day Starting day of dst for the given locality
* @param dst_start_offset_minutes Offset within day for dst
* boundary (eg 120 for US which is 02:00:00)
* @param dst_end_day Ending day of dst for the given locality
* @param dst_end_offset_minutes Offset within day given in dst for dst
* @param dst_end_offset_minutes Offset within day given in dst for dst
* boundary (eg 120 for US which is 02:00:00)
* @param dst_length_minutes Length of dst adjusment (eg: 60 for US)
* @retval The time is either ambiguous, invalid, in dst, or not in dst
*/
static time_is_dst_result
static time_is_dst_result
local_is_dst(const date_type& current_day,
const time_duration_type& time_of_day,
const date_type& dst_start_day,
@@ -127,7 +165,7 @@ namespace boost {
dst_start_offset_minutes,
dst_length_minutes);
}
if (current_day == dst_end_day) {
return process_local_dst_end_day(time_of_day,
dst_end_offset_minutes,
@@ -145,29 +183,29 @@ namespace boost {
* calculation at compile time covering all the cases. Unfortunately
* because of the number of dimensions related to daylight savings
* calculation the number of parameters is high. In addition, the
* start and end transition rules are complex types that specify
* start and end transition rules are complex types that specify
* an algorithm for calculation of the starting day and ending
* day of daylight savings time including the month and day
* day of daylight savings time including the month and day
* specifications (eg: last sunday in October).
*
* @param date_type A type that represents dates, typically gregorian::date
* @param time_duration_type Used for the offset in the day calculations
* @param dst_traits A set of traits that define the rules of dst
* @param dst_traits A set of traits that define the rules of dst
* calculation. The dst_trait must include the following:
* start_rule_functor - Rule to calculate the starting date of a
* dst transition (eg: last_kday_of_month).
* start_day - static function that returns month of dst start for
* start_day - static function that returns month of dst start for
* start_rule_functor
* start_month -static function that returns day or day of week for
* start_month -static function that returns day or day of week for
* dst start of dst
* end_rule_functor - Rule to calculate the end of dst day.
* end_day - static fucntion that returns end day for end_rule_functor
* end_month - static function that returns end month for end_rule_functor
* dst_start_offset_minutes - number of minutes from start of day to transition to dst -- 120 (or 2:00 am) is typical for the U.S. and E.U.
* dst_start_offset_minutes - number of minutes from start of day to transition off of dst -- 180 (or 3:00 am) is typical for E.U.
* dst_start_offset_minutes - number of minutes from start of day to transition off of dst -- 180 (or 3:00 am) is typical for E.U.
* dst_length_minutes - number of minutes that dst shifts clock
*/
template<class date_type,
template<class date_type,
class time_duration_type,
class dst_traits>
class dst_calc_engine
@@ -178,12 +216,12 @@ namespace boost {
typedef dst_calculator<date_type, time_duration_type> dstcalc;
//! Calculates if the given local time is dst or not
/*! Determines if the time is really in DST or not. Also checks for
/*! Determines if the time is really in DST or not. Also checks for
* invalid and ambiguous.
* @retval The time is either ambiguous, invalid, in dst, or not in dst
*/
static time_is_dst_result local_is_dst(const date_type& d,
const time_duration_type& td)
const time_duration_type& td)
{
year_type y = d.year();
@@ -192,10 +230,10 @@ namespace boost {
return dstcalc::local_is_dst(d,td,
dst_start,
dst_traits::dst_start_offset_minutes(),
dst_end,
dst_traits::dst_end_offset_minutes(),
dst_end,
dst_traits::dst_end_offset_minutes(),
dst_traits::dst_shift_length_minutes());
}
static bool is_dst_boundary_day(date_type d)
@@ -206,25 +244,19 @@ namespace boost {
}
//! The time of day for the dst transition (eg: typically 01:00:00 or 02:00:00)
static time_duration_type dst_offset()
static time_duration_type dst_offset()
{
return time_duration_type(0,dst_traits::dst_shift_length_minutes(),0);
}
static date_type local_dst_start_day(year_type year)
{
typedef typename dst_traits::start_rule_functor start_rule;
start_rule start(dst_traits::start_day(),
dst_traits::start_month());
return start.get_date(year);
return dst_traits::local_dst_start_day(year);
}
static date_type local_dst_end_day(year_type year)
{
typedef typename dst_traits::end_rule_functor end_rule;
end_rule end(dst_traits::end_day(),
dst_traits::end_month());
return end.get_date(year);
return dst_traits::local_dst_end_day(year);
}
@@ -232,12 +264,14 @@ namespace boost {
//! Depricated: Class to calculate dst boundaries for US time zones
/* Use dst_calc_engine instead.
* In 2007 US/Canada DST rules changed
* (http://en.wikipedia.org/wiki/Energy_Policy_Act_of_2005#Change_to_daylight_saving_time).
*/
template<class date_type_,
template<class date_type_,
class time_duration_type_,
unsigned int dst_start_offset_minutes=120, //from start of day
unsigned int dst_start_offset_minutes=120, //from start of day
short dst_length_minutes=60> //1 hour == 60 min in US
class us_dst_rules
class us_dst_rules
{
public:
typedef time_duration_type_ time_duration_type;
@@ -246,15 +280,16 @@ namespace boost {
typedef typename date_type::calendar_type calendar_type;
typedef date_time::last_kday_of_month<date_type> lkday;
typedef date_time::first_kday_of_month<date_type> fkday;
typedef date_time::nth_kday_of_month<date_type> nkday;
typedef dst_calculator<date_type, time_duration_type> dstcalc;
//! Calculates if the given local time is dst or not
/*! Determines if the time is really in DST or not. Also checks for
/*! Determines if the time is really in DST or not. Also checks for
* invalid and ambiguous.
* @retval The time is either ambiguous, invalid, in dst, or not in dst
*/
static time_is_dst_result local_is_dst(const date_type& d,
const time_duration_type& td)
const time_duration_type& td)
{
year_type y = d.year();
@@ -262,9 +297,9 @@ namespace boost {
date_type dst_end = local_dst_end_day(y);
return dstcalc::local_is_dst(d,td,
dst_start,dst_start_offset_minutes,
dst_end, dst_start_offset_minutes,
dst_end, dst_start_offset_minutes,
dst_length_minutes);
}
@@ -277,16 +312,28 @@ namespace boost {
static date_type local_dst_start_day(year_type year)
{
//first sunday in april
fkday fsia(Sunday, gregorian::Apr);
return fsia.get_date(year);
if (year >= year_type(2007)) {
//second sunday in march
nkday ssim(nkday::second, Sunday, date_time::Mar);
return ssim.get_date(year);
} else {
//first sunday in april
fkday fsia(Sunday, date_time::Apr);
return fsia.get_date(year);
}
}
static date_type local_dst_end_day(year_type year)
{
//last sunday in october
lkday lsio(Sunday, gregorian::Oct);
return lsio.get_date(year);
if (year >= year_type(2007)) {
//first sunday in november
fkday fsin(Sunday, date_time::Nov);
return fsin.get_date(year);
} else {
//last sunday in october
lkday lsio(Sunday, date_time::Oct);
return lsio.get_date(year);
}
}
static time_duration_type dst_offset()
@@ -294,6 +341,8 @@ namespace boost {
return time_duration_type(0,dst_length_minutes,0);
}
private:
};
@@ -309,25 +358,25 @@ namespace boost {
//! Calculates if the given local time is dst or not
/*! @retval Always is_not_in_dst since this is for zones without dst
*/
static time_is_dst_result local_is_dst(const date_type&,
const time_duration_type&)
{
return is_not_in_dst;
}
//! Calculates if the given utc time is in dst
static time_is_dst_result utc_is_dst(const date_type&,
const time_duration_type&)
static time_is_dst_result local_is_dst(const date_type&,
const time_duration_type&)
{
return is_not_in_dst;
}
static bool is_dst_boundary_day(date_type d)
//! Calculates if the given utc time is in dst
static time_is_dst_result utc_is_dst(const date_type&,
const time_duration_type&)
{
return is_not_in_dst;
}
static bool is_dst_boundary_day(date_type /*d*/)
{
return false;
}
static time_duration_type dst_offset()
static time_duration_type dst_offset()
{
return time_duration_type(0,0,0);
}
@@ -338,17 +387,5 @@ namespace boost {
} } //namespace date_time
/* Copyright (c) 2002
* CrystalClear Software, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. CrystalClear Software makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*
*/
#endif
@@ -0,0 +1,75 @@
/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
*/
#ifndef DATE_TIME_DATE_DST_TRANSITION_DAY_GEN_HPP__
#define DATE_TIME_DATE_DST_TRANSITION_DAY_GEN_HPP__
#include <string>
namespace boost {
namespace date_time {
//! Defines base interface for calculating start and end date of daylight savings
template<class date_type>
class dst_day_calc_rule
{
public:
typedef typename date_type::year_type year_type;
virtual ~dst_day_calc_rule() {}
virtual date_type start_day(year_type y) const=0;
virtual std::string start_rule_as_string() const=0;
virtual date_type end_day(year_type y) const=0;
virtual std::string end_rule_as_string() const=0;
};
//! Canonical form for a class that provides day rule calculation
/*! This class is used to generate specific sets of dst rules
*
*@tparam spec Provides a specifiction of the function object types used
* to generate start and end days of daylight savings as well
* as the date type.
*/
template<class spec>
class day_calc_dst_rule : public dst_day_calc_rule<typename spec::date_type>
{
public:
typedef typename spec::date_type date_type;
typedef typename date_type::year_type year_type;
typedef typename spec::start_rule start_rule;
typedef typename spec::end_rule end_rule;
day_calc_dst_rule(start_rule dst_start,
end_rule dst_end) :
dst_start_(dst_start),
dst_end_(dst_end)
{}
virtual date_type start_day(year_type y) const
{
return dst_start_.get_date(y);
}
virtual std::string start_rule_as_string() const
{
return dst_start_.to_string();
}
virtual date_type end_day(year_type y) const
{
return dst_end_.get_date(y);
}
virtual std::string end_rule_as_string() const
{
return dst_end_.to_string();
}
private:
start_rule dst_start_;
end_rule dst_end_;
};
} }//namespace
#endif
@@ -0,0 +1,84 @@
#ifndef DATE_TIME_FILETIME_FUNCTIONS_HPP__
#define DATE_TIME_FILETIME_FUNCTIONS_HPP__
/* Copyright (c) 2004 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
/*! @file filetime_functions.hpp
* Function(s) for converting between a FILETIME structure and a
* time object. This file is only available on systems that have
* BOOST_HAS_FTIME defined.
*/
#include <boost/date_time/compiler_config.hpp>
#if defined(BOOST_HAS_FTIME) // skip this file if no FILETIME
#include <boost/cstdint.hpp>
#include <boost/date_time/time.hpp>
#include <boost/date_time/date_defs.hpp>
namespace boost {
namespace date_time {
//! Create a time object from an initialized FILETIME struct.
/*!
* Create a time object from an initialized FILETIME struct.
* A FILETIME struct holds 100-nanosecond units (0.0000001). When
* built with microsecond resolution the file_time's sub second value
* will be truncated. Nanosecond resolution has no truncation.
*
* \note The function is templated on the FILETIME type, so that
* it can be used with both native FILETIME and the ad-hoc
* boost::detail::winapi::FILETIME_ type.
*/
template< typename TimeT, typename FileTimeT >
inline
TimeT time_from_ftime(const FileTimeT& ft)
{
typedef typename TimeT::date_type date_type;
typedef typename TimeT::date_duration_type date_duration_type;
typedef typename TimeT::time_duration_type time_duration_type;
// https://svn.boost.org/trac/boost/ticket/2523
// Since this function can be called with arbitrary times, including ones that
// are before 1970-Jan-01, we'll have to cast the time a bit differently,
// than it is done in the microsec_clock::file_time_to_microseconds function. This allows to
// avoid integer wrapping for dates before 1970-Jan-01.
// 100-nanos since 1601-Jan-01
uint64_t ft_as_integer = (static_cast< uint64_t >(ft.dwHighDateTime) << 32) | static_cast< uint64_t >(ft.dwLowDateTime);
uint64_t sec = ft_as_integer / 10000000UL;
uint32_t sub_sec = static_cast< uint32_t >(ft_as_integer % 10000000UL) // 100-nanoseconds since the last second
#if !defined(BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG)
/ 10U; // microseconds since the last second
#else
* 100U; // nanoseconds since the last second
#endif
// split sec into usable chunks: days, hours, minutes, & seconds
const uint32_t sec_per_day = 86400; // seconds per day
uint32_t days = static_cast< uint32_t >(sec / sec_per_day);
uint32_t tmp = static_cast< uint32_t >(sec % sec_per_day);
uint32_t hours = tmp / 3600; // sec_per_hour
tmp %= 3600;
uint32_t minutes = tmp / 60; // sec_per_min
tmp %= 60;
uint32_t seconds = tmp; // seconds
date_duration_type dd(days);
date_type d = date_type(1601, Jan, 01) + dd;
return TimeT(d, time_duration_type(hours, minutes, seconds, sub_sec));
}
}} // boost::date_time
#endif // BOOST_HAS_FTIME
#endif // DATE_TIME_FILETIME_FUNCTIONS_HPP__
+42
View File
@@ -0,0 +1,42 @@
#ifndef _BOOST_DATE_TIME_FIND_MATCH_HPP___
#define _BOOST_DATE_TIME_FIND_MATCH_HPP___
/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
* Use, modification and distribution is subject to the
* Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
* Author: Jeff Garland, Bart Garst
* $Date$
*/
#include <string>
namespace boost {
namespace date_time {
//! Find index of a string in either of 2 arrays
/*! find_match searches both arrays for a match to 's'. Both arrays
* must contain 'size' elements. The index of the match is returned.
* If no match is found, 'size' is returned.
* Ex. "Jan" returns 0, "Dec" returns 11, "Tue" returns 2.
* 'size' can be sent in with: (greg_month::max)() (which 12),
* (greg_weekday::max)() + 1 (which is 7) or date_time::NumSpecialValues */
template<class charT>
short find_match(const charT* const* short_names,
const charT* const* long_names,
short size,
const std::basic_string<charT>& s) {
for(short i = 0; i < size; ++i){
if(short_names[i] == s || long_names[i] == s){
return i;
}
}
return size; // not-found, return a value out of range
}
} } //namespace date_time
#endif

Some files were not shown because too many files have changed in this diff Show More