std::string ctx::DebugUtils::humanReadableDateTime(time_t timestamp, std::string format, size_t size, bool utc)
{
- struct tm * timeinfo;
+ struct tm timeinfo;
+ struct tm *result;
+ tzset();
if (utc) {
format += " UTC";
size += 4;
- timeinfo = gmtime(×tamp);
+ result = gmtime_r(×tamp, &timeinfo);
} else {
- timeinfo = localtime(×tamp);
+ result = localtime_r(×tamp, &timeinfo);
}
char buffer[size];
- if (timeinfo) {
- strftime(buffer, size, format.c_str(), timeinfo);
+ if (result) {
+ strftime(buffer, size, format.c_str(), &timeinfo);
} else {
snprintf(buffer, size, "NULL");
}
ctx::TimeFeatures ctx::VisitCateger::timeFeatures(const time_t &time)
{
- struct tm *timeinfo = localtime(&time);
- if (timeinfo == NULL) {
+ struct tm timeinfo;
+ struct tm *result;
+ tzset();
+ result = localtime_r(&time, &timeinfo);
+ if (result == NULL) {
return {0, 0, 0, false};
}
- int minutesSinceMidnight = 60 * timeinfo->tm_hour + timeinfo->tm_min;
- int weekday = (timeinfo->tm_wday + 6) % 7; // Monday is 0, Sunday is 6
+ int minutesSinceMidnight = 60 * timeinfo.tm_hour + timeinfo.tm_min;
+ int weekday = (timeinfo.tm_wday + 6) % 7; // Monday is 0, Sunday is 6
bool weekend = weekday > 4;
int minutesSinceBeginingOfTheWeek = 24 * 60 * weekday + minutesSinceMidnight;
return {