Files
IoTManager/src/Utils/TimeUtils.cpp

161 lines
5.6 KiB
C++
Raw Normal View History

2020-06-20 14:27:58 +03:00
#include "Utils\TimeUtils.h"
#include "Global.h"
#include "Utils\StringUtils.h"
2020-06-22 03:11:02 +03:00
#define ONE_MINUTE_s 60
#define ONE_HOUR_s 60 * ONE_MINUTE_s
2020-06-25 09:21:42 +03:00
time_t t;
struct tm* tm;
static const char* wd[7] = {"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat"};
2020-06-20 17:12:59 +03:00
String getTimeUnix() {
2020-06-25 09:21:42 +03:00
t = time(NULL);
tm = localtime(&t);
Serial.printf("%04d/%02d/%02d(%s) %02d:%02d:%02d\n",
tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
wd[tm->tm_wday],
tm->tm_hour, tm->tm_min, tm->tm_sec);
delay(1000);
2020-06-20 14:27:58 +03:00
time_t now = time(nullptr);
if (now < 30000) {
return "failed";
} else {
return String(now);
}
}
2020-06-20 17:12:59 +03:00
boolean getUnixTimeStr(String& res) {
time_t now = time(nullptr);
res = String(now);
return now < 30000;
}
String getTime() {
2020-06-22 03:11:02 +03:00
time_t now = time(nullptr);
2020-06-20 14:27:58 +03:00
int zone = 3600 * jsonReadStr(configSetupJson, "timezone").toInt();
now = now + zone;
String Time = ""; // Строка для результатов времени
Time += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
int i = Time.indexOf(":"); //Ишем позицию первого символа :
Time = Time.substring(i - 2, i + 6); // Выделяем из строки 2 символа перед символом : и 6 символов после
return Time; // Возврашаем полученное время
}
2020-06-20 22:51:14 +03:00
String getTimeWOsec() {
2020-06-22 03:11:02 +03:00
time_t now = time(nullptr);
2020-06-20 14:27:58 +03:00
int zone = 3600 * jsonReadStr(configSetupJson, "timezone").toInt();
now = now + zone;
String Time = ""; // Строка для результатов времени
Time += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
int i = Time.indexOf(":"); //Ишем позицию первого символа :
Time = Time.substring(i - 2, i + 3); // Выделяем из строки 2 символа перед символом : и 6 символов после
return Time; // Возврашаем полученное время
}
2020-06-20 22:51:14 +03:00
String getDate() {
2020-06-22 03:11:02 +03:00
time_t now = time(nullptr);
2020-06-20 14:27:58 +03:00
int zone = 3600 * jsonReadStr(configSetupJson, "timezone").toInt();
now = now + zone;
String Data = ""; // Строка для результатов времени
Data += ctime(&now); // Преобразуем время в строку формата Thu Jan 19 00:55:35 2017
Data.replace("\n", "");
uint8_t i = Data.lastIndexOf(" "); //Ишем позицию последнего символа пробел
String Time = Data.substring(i - 8, i + 1); // Выделяем время и пробел
Data.replace(Time, ""); // Удаляем из строки 8 символов времени и пробел
return Data; // Возврашаем полученную дату
}
2020-06-20 22:51:14 +03:00
String getDateDigitalFormated() {
String date = getDate();
2020-06-20 14:27:58 +03:00
date = deleteBeforeDelimiter(date, " ");
date.replace("Jan", "01");
date.replace("Feb", "02");
date.replace("Mar", "03");
date.replace("Apr", "04");
date.replace("May", "05");
date.replace("Jun", "06");
date.replace("Jul", "07");
date.replace("Aug", "08");
date.replace("Sep", "09");
date.replace("Oct", "10");
date.replace("Nov", "11");
date.replace("Dec", "12");
String month = date.substring(0, 2);
String day = date.substring(3, 5);
String year = date.substring(8, 10);
String out = day;
out += ".";
out += month;
out += ".";
out += year;
return out;
}
int timeToMin(String Time) {
//"00:00:00" время в секунды
long min = selectToMarker(Time, ":").toInt() * 60; //общее количество секунд в полных часах
Time = deleteBeforeDelimiter(Time, ":"); // Теперь здесь минуты секунды
min += selectToMarker(Time, ":").toInt(); // Добавим секунды из полных минут
return min;
2020-06-20 22:51:14 +03:00
}
2020-06-22 03:11:02 +03:00
static const char* TIME_FORMAT PROGMEM = "%02d:%02d:%02d";
static const char* TIME_FORMAT_WITH_DAYS PROGMEM = "%dd %02d:%02d";
2020-06-20 22:51:14 +03:00
const String prettyMillis(unsigned long time_ms) {
2020-06-22 03:11:02 +03:00
unsigned long tmp = time_ms / 1000;
2020-06-20 22:51:14 +03:00
unsigned long seconds;
unsigned long minutes;
unsigned long hours;
unsigned long days;
seconds = tmp % 60;
tmp = tmp / 60;
minutes = tmp % 60;
tmp = tmp / 60;
2020-06-22 03:11:02 +03:00
2020-06-20 22:51:14 +03:00
hours = tmp % 24;
days = tmp / 24;
2020-06-22 03:11:02 +03:00
char buf[32];
2020-06-20 22:51:14 +03:00
if (days) {
2020-06-22 03:11:02 +03:00
sprintf_P(buf, TIME_FORMAT_WITH_DAYS, days, hours, minutes, seconds);
2020-06-20 22:51:14 +03:00
} else {
2020-06-22 03:11:02 +03:00
sprintf_P(buf, TIME_FORMAT, hours, minutes, seconds);
2020-06-20 22:51:14 +03:00
}
return String(buf);
}
2020-06-22 03:11:02 +03:00
2020-06-24 01:16:00 +03:00
unsigned long millis_since(unsigned long sinse) {
return millis_passed(sinse, millis());
}
unsigned long millis_passed(unsigned long start, unsigned long finish) {
unsigned long result = 0;
if (start <= finish) {
unsigned long passed = finish - start;
if (passed <= __LONG_MAX__) {
result = static_cast<long>(passed);
} else {
result = static_cast<long>((__LONG_MAX__ - finish) + start + 1u);
}
} else {
unsigned long passed = start - finish;
if (passed <= __LONG_MAX__) {
result = static_cast<long>(passed);
result = -1 * result;
} else {
result = static_cast<long>((__LONG_MAX__ - start) + finish + 1u);
result = -1 * result;
}
}
return result;
}