Skip to content

Commit

Permalink
fix(influxdb): Consider DST setting for UTC time conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
Slider0007 authored Oct 31, 2023
1 parent 35d90cd commit f75c2c8
Showing 1 changed file with 12 additions and 20 deletions.
32 changes: 12 additions & 20 deletions code/components/jomjol_influxdb/interface_influxdb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,20 +49,16 @@ void InfluxDB_V2_Publish(std::string _measurement, std::string _key, std::string
if (_timestamp.length() > 0)
{
struct tm tm;
strptime(_timestamp.c_str(), PREVALUE_TIME_FORMAT_OUTPUT, &tm);
time_t t = mktime(&tm); // Time in Localtime (looks like timezone is not used by strptime)

// struct tm * ptm;
// ptm = gmtime ( &t );
// time_t utc = mktime(ptm);
time_t t;
time(&t);
localtime_r(&t, &tm); // Extract DST setting from actual time to consider it for timestamp evaluation

LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Use handover timestamp: " + _timestamp + " converted GMT timestamp: " + std::to_string(t));

// utc = 2*t - utc; // Take care of timezone (looks difficult, but is easy: t = t + (t - utc), weil t-utc = timezone)
// LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "time conversion utc after: " + std::to_string(utc));
strptime(_timestamp.c_str(), TIME_FORMAT_OUTPUT, &tm);
t = mktime(&tm);
LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Timestamp: " + _timestamp + ", Timestamp (UTC): " + std::to_string(t));

sprintf(nowTimestamp,"%ld000000000", (long) t); // UTC

payload = _measurement + " " + _key + "=" + _content + " " + nowTimestamp;
}
else
Expand Down Expand Up @@ -165,20 +161,16 @@ void InfluxDBPublish(std::string _measurement, std::string _key, std::string _co
if (_timestamp.length() > 0)
{
struct tm tm;
strptime(_timestamp.c_str(), PREVALUE_TIME_FORMAT_OUTPUT, &tm);
time_t t = mktime(&tm); // Time in Localtime (looks like timezone is not used by strptime)

// struct tm * ptm;
// ptm = gmtime ( &t );
// time_t utc = mktime(ptm);
time_t t;
time(&t);
localtime_r(&t, &tm); // Extract DST setting from actual time to consider it for timestamp evaluation

LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Use handover timestamp: " + _timestamp + " converted GMT timestamp: " + std::to_string(t));

// utc = 2*t - utc; // Take care of timezone (looks difficult, but is easy: t = t + (t - utc), weil t-utc = timezone)
// LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "time conversion utc after: " + std::to_string(utc));
strptime(_timestamp.c_str(), TIME_FORMAT_OUTPUT, &tm);
t = mktime(&tm);
LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "Timestamp: " + _timestamp + ", Timestamp (UTC): " + std::to_string(t));

sprintf(nowTimestamp,"%ld000000000", (long) t); // UTC

payload = _measurement + " " + _key + "=" + _content + " " + nowTimestamp;
}
else
Expand Down

0 comments on commit f75c2c8

Please sign in to comment.