Как сравнить время полученное из Интернета?

Мир Ардуинщиков
Offline
Зарегистрирован: 18.05.2020

Всем привет! У меня есть программа которая получает время из Интернета (для этого она подключается к указанной в коде точке доступа). Кто-то знает как определить, что время полученное из Интернета больше, например, 12 часов и 30 минут, но при этом меньше чем, например, 15 часов и 45 минут? Буду рад идеям, которые вы мне предложите ;-) PS: эта программа полноценно работает на плате ESP8266.

#include <ESP8266WiFi.h>
#include <time.h>

const char *ssid_name        =  "****";
const char *ssid_password  = "********";

long timezone = 2; // указываем часовой пояс
byte daysavetime = 1; // указываем летнее время

int timing;

WiFiClient wifi_client;      

void setup() {
  Serial.begin(115200);
}

void loop() {
  if (WiFi.status() != WL_CONNECTED) {
    Serial.print("Подключаемся к WiFi точке: ");
    Serial.println(ssid_name);
    WiFi.begin(ssid_name, ssid_password);

    if (WiFi.waitForConnectResult() != WL_CONNECTED)
      return;
    Serial.println("Подключились к WiFi!");
    Serial.print("Локальный IP: ");
    Serial.println(WiFi.localIP());

    configTime(3600*timezone, daysavetime, "pool.ntp.org", "time.nist.gov");
    Serial.println("Получаем время из Интернета ...");

    while(!time(nullptr)){
     Serial.print("*");
     delay(1000);
    }
    
    Serial.println("Время отклика ... OK");
  }

  time_t now = time(nullptr);
  struct tm* p_tm = localtime(&now);

  if (millis() - timing > 1000) {
    timing = millis();
    Serial.print(p_tm->tm_hour);
    Serial.print(":");
    Serial.print(p_tm->tm_min);
    Serial.print(":");
    Serial.println(p_tm->tm_sec);
  }
}

 

b707
Offline
Зарегистрирован: 26.05.2017

А вы умеете сравнить, скажем, переменную Х - что она больше 12, но меньше 15 ? Если да, то что мешает проделать это с часами? А потом ровно то же самое - с минутами?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Какие часы? какие минуты? Про unixtime что-нибудь слышали?

Мир Ардуинщиков
Offline
Зарегистрирован: 18.05.2020

Только что узнал) И как же использовать  unixtime?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Мир Ардуинщиков пишет:

Только что узнал) И как же использовать  unixtime?

Так, как Вам нужно.

Мир Ардуинщиков
Offline
Зарегистрирован: 18.05.2020

Спасибо, за подсказку! Уже разобрался с UNIX Time

b707
Offline
Зарегистрирован: 26.05.2017

Мир Ардуинщиков пишет:

Спасибо, за подсказку! Уже разобрался с UNIX Time

Юникстайм - это правильно, но все-таки как сравнить часы с 12 и 15 - так в голову и не пришло?

Мир Ардуинщиков
Offline
Зарегистрирован: 18.05.2020

Сложность в том, что нужно сравнивать не только часы, но и минуты, а просто сравнить их не получится 

Upper
Offline
Зарегистрирован: 23.06.2020

Мир Ардуинщиков пишет:

Сложность в том, что нужно сравнивать не только часы, но и минуты, а просто сравнить их не получится 

Желательно и самому мочь придумать как сравнивать (Часы*60  + минуты) .

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Сравнивайте ваше время ( Часы*100 + минуты) с 1230 и 1545.
И неважно что у вас никогда не будет значений типа 1860, 1861.....
Неравенству это будет всё равно....
Вот только как вы будете через полночь переходить....

b707
Offline
Зарегистрирован: 26.05.2017

Мир Ардуинщиков пишет:

Сложность в том, что нужно сравнивать не только часы, но и минуты, а просто сравнить их не получится 

ну я и говорю - "не осилил" :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

b707 пишет:

Юникстайм - это правильно, но все-таки как сравнить часы с 12 и 15 - так в голову и не пришло?

Перевести в юникстайм и уже юникстайм сравнивать между собой.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Upper пишет:

Мир Ардуинщиков пишет:

Сложность в том, что нужно сравнивать не только часы, но и минуты, а просто сравнить их не получится 

Желательно и самому мочь придумать как сравнивать (Часы*60  + минуты) .

И что раньше, 23:59 или 00:01?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

andriano пишет:

Upper пишет:

Мир Ардуинщиков пишет:

Сложность в том, что нужно сравнивать не только часы, но и минуты, а просто сравнить их не получится 

Желательно и самому мочь придумать как сравнивать (Часы*60  + минуты) .

И что раньше, 23:59 или 00:01?

Месяц*1000000+Дата*10000+ Часы*100 + минуты

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Что раньше, 01:01 1 января 2010 года или 01:01 2 января 2000 года?

 

Сравнение имеет смысл только при ПОЛНОМ задании всех составляющих (по крайней мере, всех "старших" до обнаружения различия). И в этом случае уже возникает вопрос об используемой разрядности. Юникстайм обеспечивает достаточно компактное представление. И, одновременно, кроме качественного результата (раньше/позже) позволяет получить количественный (на сколько дней/часов/минут).

b707
Offline
Зарегистрирован: 26.05.2017

andriano пишет:

Что раньше, 01:01 1 января 2010 года или 01:01 2 января 2000 года?

Как трудно жить среди занудов...
Сказал трехлетний Михаил.
Среди зануд! - поправил Павел
Тридцатилетний и в очках.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну да, как можно еще назвать человека, указывающего на ошибки? 

Только занудой.