From bc6140a1eb1e771bdb4ccb803a38155e20395f56 Mon Sep 17 00:00:00 2001 From: ipknHama Date: Sat, 19 Apr 2014 07:27:05 +0900 Subject: added HTTP Date header --- datetime.h | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 datetime.h (limited to 'datetime.h') diff --git a/datetime.h b/datetime.h new file mode 100644 index 0000000..9611b38 --- /dev/null +++ b/datetime.h @@ -0,0 +1,77 @@ +#pragma once + +#include +#include +#include + +namespace flask +{ + // code from http://stackoverflow.com/questions/2838524/use-boost-date-time-to-parse-and-create-http-dates + class DateTime + { + public: + DateTime() + : m_dt(boost::local_time::local_sec_clock::local_time(boost::local_time::time_zone_ptr())) + { + } + DateTime(const std::string& path) + : DateTime() + { + from_file(path); + } + + // return datetime string + std::string str() + { + std::string result; + boost::local_time::local_time_facet* lf(new boost::local_time::local_time_facet("%a, %d %b %Y %H:%M:%S GMT")); + try + { + std::stringstream ss; + ss.imbue(std::locale(ss.getloc(), lf)); + ss << m_dt; + result = ss.str(); + } + catch (std::exception& e) + { + std::cerr << "Exception: " << e.what() << std::endl; + } + return result; + } + + // update datetime from file mod date + std::string from_file(const std::string& path) + { + try + { + boost::filesystem::path p(path); + boost::posix_time::ptime pt = boost::posix_time::from_time_t( + boost::filesystem::last_write_time(p)); + m_dt = boost::local_time::local_date_time(pt, boost::local_time::time_zone_ptr()); + } + catch (std::exception& e) + { + std::cout << "Exception: " << e.what() << std::endl; + } + return str(); + } + + // parse datetime string + void parse(const std::string& dt) + { + boost::local_time::local_time_input_facet* lif(new boost::local_time::local_time_input_facet("%a, %d %b %Y %H:%M:%S GMT")); + std::stringstream ss(dt); + ss.imbue(std::locale(std::locale::classic(), lif)); + ss >> m_dt; + } + + // boolean equal operator + friend bool operator==(const DateTime& left, const DateTime& right) + { + return (left.m_dt == right.m_dt); + } + + private: + boost::local_time::local_date_time m_dt; + }; +} -- cgit v1.2.3-54-g00ecf