diff options
author | Tobias Markmann <tm@ayena.de> | 2015-09-21 10:06:57 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2015-09-21 10:06:57 (GMT) |
commit | eed183fbd5d121049d5965d7c60abd65f44d0376 (patch) | |
tree | 63caaca65cc39a9fffc3f91dd7cafad79d4be4a5 /Swiften/Base/DateTime.cpp | |
parent | 68bb160b993dde045f502f10ecbbccce9d9184c1 (diff) | |
download | swift-eed183fbd5d121049d5965d7c60abd65f44d0376.zip swift-eed183fbd5d121049d5965d7c60abd65f44d0376.tar.bz2 |
Stop throwing out of range exception from dateTimeToLocalString
The dateTimeToLocalString uses boost functions that may throw
an out of range exception for times earlier than 1970.
This commit caches this exception and just returns an empty
string in this case.
Test-Information:
Added a unit test to verify this behavior.
Change-Id: I05eb17605331e14d9eac04fbfd286362e7d4eb46
Diffstat (limited to 'Swiften/Base/DateTime.cpp')
-rw-r--r-- | Swiften/Base/DateTime.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/Swiften/Base/DateTime.cpp b/Swiften/Base/DateTime.cpp index 4f55a8e..d19e9c7 100644 --- a/Swiften/Base/DateTime.cpp +++ b/Swiften/Base/DateTime.cpp @@ -10,12 +10,13 @@ #include <boost/date_time/time_facet.hpp> #include <boost/date_time/local_time/local_time.hpp> #include <boost/date_time/posix_time/posix_time.hpp> #include <boost/date_time/c_local_time_adjustor.hpp> #include <Swiften/Base/String.h> +#include <Swiften/Base/Log.h> namespace Swift { boost::posix_time::ptime stringToDateTime(const std::string& string) { static std::locale locale(std::locale::classic(), new boost::local_time::local_time_input_facet("%Y-%m-%d %H:%M:%S%F%ZP")); std::istringstream stream(string); @@ -30,10 +31,17 @@ std::string dateTimeToString(const boost::posix_time::ptime& time) { String::replaceAll(stampString, ',', "."); stampString += "Z"; return stampString; } std::string dateTimeToLocalString(const boost::posix_time::ptime& time) { - return boost::posix_time::to_simple_string(boost::date_time::c_local_adjustor<boost::posix_time::ptime>::utc_to_local(time)); + std::string localString; + try { + localString = boost::posix_time::to_simple_string(boost::date_time::c_local_adjustor<boost::posix_time::ptime>::utc_to_local(time)); + } + catch(std::out_of_range& exception) { + SWIFT_LOG(debug) << exception.what() << std::endl; + } + return localString; } } |