aboutsummaryrefslogtreecommitdiffstats
path: root/datetime.h
diff options
context:
space:
mode:
authoripknHama <ipknhama@gmail.com>2014-04-19 07:27:05 +0900
committeripknHama <ipknhama@gmail.com>2014-04-19 07:27:05 +0900
commitbc6140a1eb1e771bdb4ccb803a38155e20395f56 (patch)
treeb95a349850edc5ec6b073456a119f215cafa03bd /datetime.h
parentde7a70de347c33ece5b25379c366b2c49418df08 (diff)
downloadcrow-bc6140a1eb1e771bdb4ccb803a38155e20395f56.tar.gz
crow-bc6140a1eb1e771bdb4ccb803a38155e20395f56.zip
added HTTP Date header
Diffstat (limited to 'datetime.h')
-rw-r--r--datetime.h77
1 files changed, 77 insertions, 0 deletions
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 <string>
+#include <boost/date_time/local_time/local_time.hpp>
+#include <boost/filesystem.hpp>
+
+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;
+ };
+}