summaryrefslogtreecommitdiff
path: root/src/third_party/boost-1.60.0/boost/date_time/gregorian/conversion.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/boost-1.60.0/boost/date_time/gregorian/conversion.hpp')
-rw-r--r--src/third_party/boost-1.60.0/boost/date_time/gregorian/conversion.hpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/third_party/boost-1.60.0/boost/date_time/gregorian/conversion.hpp b/src/third_party/boost-1.60.0/boost/date_time/gregorian/conversion.hpp
new file mode 100644
index 00000000000..c844c4e34b1
--- /dev/null
+++ b/src/third_party/boost-1.60.0/boost/date_time/gregorian/conversion.hpp
@@ -0,0 +1,68 @@
+#ifndef _GREGORIAN__CONVERSION_HPP___
+#define _GREGORIAN__CONVERSION_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: Jeff Garland, Bart Garst
+ * $Date$
+ */
+
+#include <cstring>
+#include <string>
+#include <stdexcept>
+#include <boost/throw_exception.hpp>
+#include <boost/date_time/c_time.hpp>
+#include <boost/date_time/special_defs.hpp>
+#include <boost/date_time/gregorian/gregorian_types.hpp>
+
+namespace boost {
+
+namespace gregorian {
+
+ //! Converts a date to a tm struct. Throws out_of_range exception if date is a special value
+ inline
+ std::tm to_tm(const date& d)
+ {
+ if (d.is_special())
+ {
+ std::string s = "tm unable to handle ";
+ switch (d.as_special())
+ {
+ case date_time::not_a_date_time:
+ s += "not-a-date-time value"; break;
+ case date_time::neg_infin:
+ s += "-infinity date value"; break;
+ case date_time::pos_infin:
+ s += "+infinity date value"; break;
+ default:
+ s += "a special date value"; break;
+ }
+ boost::throw_exception(std::out_of_range(s));
+ }
+
+ std::tm datetm;
+ std::memset(&datetm, 0, sizeof(datetm));
+ boost::gregorian::date::ymd_type ymd = d.year_month_day();
+ datetm.tm_year = ymd.year - 1900;
+ datetm.tm_mon = ymd.month - 1;
+ datetm.tm_mday = ymd.day;
+ datetm.tm_wday = d.day_of_week();
+ datetm.tm_yday = d.day_of_year() - 1;
+ datetm.tm_isdst = -1; // negative because not enough info to set tm_isdst
+ return datetm;
+ }
+
+ //! Converts a tm structure into a date dropping the any time values.
+ inline
+ date date_from_tm(const std::tm& datetm)
+ {
+ return date(static_cast<unsigned short>(datetm.tm_year+1900),
+ static_cast<unsigned short>(datetm.tm_mon+1),
+ static_cast<unsigned short>(datetm.tm_mday));
+ }
+
+} } //namespace boost::gregorian
+
+#endif