RTC(Real Time Clock)
WiFiを使って日付と時刻の取得の記事で取得したデータをRTC(Real Time Clock)に適用します。
/*
*******************************************************************************
* M5Stack prototype
* date:2022/7/27
* Author Sadajejeje
*******************************************************************************
*/
#include <M5Core2.h>
#include <WiFi.h>

#define JST (3600L * 9)

const char* ssid = "your_ssid";
const char* password = "your_password";
bool conected = true;
RTC_TimeTypeDef rtcTime;
RTC_DateTypeDef rtcDate;

void setup(){
    M5.begin();  //Init M5Core2
    M5.Lcd.setTextSize(2);
    int connectCnt = 0;

    WiFi.begin(ssid, password);
    M5.Rtc.begin();  //Initialize the RTC clock.
    while (WiFi.status() != WL_CONNECTED){
        delay(500);
        M5.Lcd.print('*');
        connectCnt++;
        if(connectCnt >=10){
            conected = false;
            break;
        }
    }

    if(conected == true){
        M5.Lcd.print("\n\nIP Address ");
        M5.Lcd.println(WiFi.localIP());
        delay(1000);

        configTime(JST,0,"ntp.nict.jp", "time.google.com", "ntp.jst.mfeed.ad.jp");
    }
    M5.Lcd.setTextSize(3);
}

void loop(){
    struct tm tm;
    char buf[32];

    if(conected == true){
        if(getLocalTime(&tm)){
            M5.Lcd.setTextDatum(TC_DATUM);
            sprintf(buf, "%d/%d/%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
            M5.Lcd.drawString(buf, 160, 80, 2);
            sprintf(buf, "%02d:%02d:%02d\n", tm.tm_hour, tm.tm_min, tm.tm_sec);
            M5.Lcd.drawString(buf, 160, 140, 2);

            rtcDate.Year = tm.tm_year + 1900;
            rtcDate.Month = tm.tm_mon + 1;
            rtcDate.Date = tm.tm_mday;
            M5.Rtc.SetDate(&rtcDate);

            rtcTime.Hours = tm.tm_hour;
            rtcTime.Minutes = tm.tm_min;
            rtcTime.Seconds = tm.tm_sec;
            M5.Rtc.SetTime(&rtcTime); 

        }
    }
    else{
        M5.Lcd.setTextDatum(TC_DATUM);
        M5.Rtc.GetDate(&rtcDate);
        sprintf(buf, "%d/%d/%d\n", rtcDate.Year, rtcDate.Month, rtcDate.Date);
        M5.Lcd.drawString(buf, 160, 80, 2);

        M5.Rtc.GetTime(&rtcTime);
        sprintf(buf, "%02d:%02d:%02d\n", rtcTime.Hours, rtcTime.Minutes, rtcTime.Seconds);
        M5.Lcd.drawString(buf, 160, 140, 2);

    }
    delay(1000);    
}


ssidとpasswordはご自分の機器に合わせてください。
M5.Rtc.SetDate(&rtcDate);
M5.Rtc.SetTime(&rtcTime);
RTCに日付と時間のデータをセットします。

M5.Rtc.GetDate(&rtcDate);
M5.Rtc.GetTime(&rtcTime);
RTCからのデータを読みだします。
I2Cだとちょっと面倒ですが、簡単なAPIです。
WiFiが使えるときはNPTからのデータを表示します。
WiFiが使えないときはRTCからのデータを表示します。
RTCは製品により1日で1秒狂ったり、1カ月で1秒しか狂わないなど製品の精度が異なります。