Added daylight savings time detection to Easy::Entity::get_time().
This commit is contained in:
parent
5dee115f8f
commit
7f46be68d1
@ -14,10 +14,10 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <ctime>
|
||||
#include <iomanip> // get_time
|
||||
#include <sstream>
|
||||
#include <chrono>
|
||||
#include <ctime>
|
||||
#include <regex>
|
||||
#include <algorithm>
|
||||
#include "easy/entity.hpp"
|
||||
@ -233,9 +233,10 @@ const Easy::time Easy::Entity::get_time(const string &key) const
|
||||
if (node.isString())
|
||||
{
|
||||
std::stringstream sstime(node.asString());
|
||||
struct std::tm tm;
|
||||
struct std::tm tm = {};
|
||||
tm.tm_isdst = -1; // Detect daylight saving time.
|
||||
sstime >> std::get_time(&tm, "%Y-%m-%dT%T");
|
||||
std::time_t time = timegm(&tm);
|
||||
std::time_t time = timegm(&tm); // Assume time is UTC.
|
||||
_was_set = true;
|
||||
return { system_clock::from_time_t(time) };
|
||||
}
|
||||
|
@ -32,18 +32,18 @@ const string Easy::time::strtime(const string &format, const bool &local) const
|
||||
{
|
||||
constexpr std::uint16_t bufsize = 1024;
|
||||
std::time_t time = system_clock::to_time_t(timepoint);
|
||||
std::tm *timeinfo;
|
||||
std::tm *tm;
|
||||
if (local)
|
||||
{
|
||||
timeinfo = std::localtime(&time);
|
||||
tm = std::localtime(&time);
|
||||
}
|
||||
else
|
||||
{
|
||||
timeinfo = std::gmtime(&time);
|
||||
tm = std::gmtime(&time);
|
||||
}
|
||||
|
||||
char buffer[bufsize];
|
||||
std::strftime(buffer, bufsize, format.c_str(), timeinfo);
|
||||
std::strftime(buffer, bufsize, format.c_str(), tm);
|
||||
|
||||
return static_cast<const string>(buffer);
|
||||
}
|
||||
|
Reference in New Issue
Block a user