Set the wall clock time or change GMT offset without ntp server? I have been able to get the current time from an NTP server and set what appears to be an internal clock using the configTime() function from the ESP32 core.  I can then get the current time with the function getLocalTime().

I would like to be able to set the time returned by getLocalTime() from user input rather than from an NTP server.  I would also like to be able to update the GMT Offset without needing to reconnect to the server.

How do I interact with the clock value used by getLocalTime()? Is there documentation for this clock somewhere?



per request the SimpleTime example from the ESP32 install:

#include &lt;WiFi.h&gt;
#include "time.h"

const char* ssid       = "YOUR_SSID";
const char* password   = "YOUR_PASS";

const char* ntpServer = "pool.ntp.org";
const long  gmtOffset_sec = 3600;
const int   daylightOffset_sec = 3600;

void printLocalTime()
{
  struct tm timeinfo;
  if(!getLocalTime(&amp;timeinfo)){
    Serial.println("Failed to obtain time");
    return;
  }
  Serial.println(&amp;timeinfo, "%A, %B %d %Y %H:%M:%S");
}

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

  //connect to WiFi
  Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.println(" CONNECTED");

  //init and get the time
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  printLocalTime();

  //disconnect WiFi as it's no longer needed
  WiFi.disconnect(true);
  WiFi.mode(WIFI_OFF);
}

void loop()
{
  delay(1000);
  printLocalTime();
}
The functions configTime and getLocalTime are from ESP32 core file esp32-hal-time.c. This wraps the ESP32 SDK functions. You can use the SDK functions to set the time and zone. They work with the RTC peripheral of the ESP32.

You can use setTimeZone to set the time zone.

The time.h is standard C time library. The ESP32 SDK makes it to work with the built in RTC (reference). To set the time it gets complicated. You would have to use undocumented SDK time functions.