Help needed with Time based Relay ESP8266

I was trying to control a relay based on time.
What I am able to achieve is to display time on an OLED display and update it via WiFi.
Here is the code

  #include <ESP8266WiFi.h>
    #include <time.h>
        
    #include <SPI.h>
    #include <Wire.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
        
    #define OLED_RESET LED_BUILTIN //4
    Adafruit_SSD1306 display(OLED_RESET);
        
    const char* ssid = "WiFi Name";
    const char* password = "WiFi Password";
        
    int ledPin = 13;
    int relay=14;
    int timezone = 5.5 * 3600;
    int dst = 0;
        
    #if (SSD1306_LCDHEIGHT != 32)
    #error("Height incorrect, please fix Adafruit_SSD1306.h!");
    #endif
        
    void setup() {
        
       display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
       pinMode(relay,OUTPUT);
        
       // Clear the buffer.
       display.clearDisplay();
       display.display();
        
       pinMode(ledPin,OUTPUT);
       digitalWrite(ledPin,LOW);
        
       Serial.begin(115200);
        
       display.setTextSize(1);
       display.setTextColor(WHITE);
        
       display.setCursor(0,0);
       display.println("Wifi connecting to ");
       display.println( ssid );
        
       WiFi.begin(ssid,password);
        
       display.println("\nConnecting");
        
       display.display();
        
       while( WiFi.status() != WL_CONNECTED ){
          delay(500);
          display.print(".");
          display.display();
       }
        
       // Clear the buffer.
       display.clearDisplay();
       display.display();
       display.setCursor(0,0);
        
       display.println("Wifi Connected!");
       display.print("IP:");
       display.println(WiFi.localIP() );
        
       display.display();
        
       configTime(timezone, dst, "pool.ntp.org","time.nist.gov");
       display.println("\nWaiting for NTP...");
        
       while(!time(nullptr)){
          Serial.print("*");
        
          delay(1000);
       }
       display.println("\nTime response....OK");
       display.display();
       delay(1000);
        
       display.clearDisplay();
       display.display();
    }
        
    void loop() {
        
       time_t now = time(nullptr);
       struct tm* p_tm = localtime(&now);
        
       Serial.print(p_tm->tm_mday);
       Serial.print("/");
       Serial.print(p_tm->tm_mon + 1);
       Serial.print("/");
       Serial.print(p_tm->tm_year + 1900);
        
       Serial.print(" ");
        
       Serial.print(p_tm->tm_hour);
       Serial.print(":");
       Serial.print(p_tm->tm_min);
       Serial.print(":");
       Serial.println(p_tm->tm_sec);
        
       // Clear the buffer.
       display.clearDisplay();
        
       display.setTextSize(3);
       display.setTextColor(WHITE);
        
       display.setCursor(0,0);
       display.print(p_tm->tm_hour);
       display.print(":");
       if( p_tm->tm_min <10)
          display.print("0");
       display.print(p_tm->tm_min);
        
       display.setTextSize(2);
       display.setCursor(90,5);
       display.print(".");
       if( p_tm->tm_sec <10)
          display.print("0");
       display.print(p_tm->tm_sec);
        
       display.setTextSize(1);
       display.setCursor(0,24);
       display.print(p_tm->tm_mday);
       display.print("/");
       display.print(p_tm->tm_mon + 1);
       display.print("/");
       display.print(p_tm->tm_year + 1900);
        
       display.display();
       if((p_tm->tm_hour)>20)
       {
                     
          digitalWrite(relay,HIGH);
                     
                                
       }
       if((p_tm->tm_hour)<20)
       {
                     
          digitalWrite(relay,LOW);
                     
                                
       }
                   
       delay(1000); // update every 1 sec
        
    }

I am new to coding, Someone please update the code with the following feature.
The relay should turn on at 21H (9PM) and turn off at 7H (7AM).
I have posted the same question on stackexchange, but no help received yet.

So where are you stuck ?

This section of code

  if ((p_tm->tm_hour) > 20)
  {
    digitalWrite(relay, HIGH);
  }
  if ((p_tm->tm_hour) < 20)
  {
    digitalWrite(relay, LOW);
  }

is doing part of what you want by the look of it but the code has no test for 7am as far as I can see. Have you tried adding it ?

Use an if/else construction there, that's going to be the easiest:
if (time between 7 and 20) relay off
else relay on