PCF8563 RTC time change when power turn off

i have this code for running a garden indoor. i´m going to set distinct time for run the light. My problem is that RTC module is not keeping de time after i turn the power off and on again.
is that something wrong after i run the rtc.begin(); function or anywhere else?

#define BLYNK_PRINT Serial

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <Wire.h>
#include <RTClib.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "";
char ssid[] = "";
char pass[] = "";

const int hygrometer = 36;  //Sensor de Umidade de solo
int value;

const int photopin = 34;  //Sensor de Luz canal analogico
int valuephoto;

#define DHTTYPE DHT22  //Sensor Umidade do AR e Temperatura
#define DHTPIN 18
DHT dht(DHTPIN, DHT22);
float localHum = 0;
float localTemp = 0;

PCF8563 rtc;
DateTime alarm_l;
const byte rtc_int = 0;

int rele1 = 33;
int rele2 = 32;

void setup() {  
  Serial.begin(57600);
  Serial.println("");
  Serial.println("ESP32 DHT Temperature and Humidity");
  Serial.println("");
    
  pinMode(rele1, OUTPUT);                  // definições das portas rele1 e rele2
  pinMode(rele2, OUTPUT);  
  digitalWrite(rele1, LOW);               // LOW relay
  digitalWrite(rele2, LOW);

  rtc.begin();
  pinMode(rtc_int, INPUT);
  attachInterrupt(digitalPinToInterrupt(rtc_int), interrupt, FALLING);
  Wire.begin(21,22);
  delay(3000);
 
    if (!rtc.isrunning()) {
        Serial.println("RTC is NOT running!");
        rtc.adjust(DateTime(2020,01,25,19,14,01));
        }
    
  
  delay(3000);
      
  dht.begin();
  
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, pass);
  int wifi_ctr = 0;
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("WiFi connected");  

  Blynk.begin("", ssid, pass);

}

void loop(){
  
    Blynk.run();
    getDHT();
    getSolo();
    getLux();
    getTime();
    Serial.println("########### ");
    return;
}
void  getTime(){
  
  DateTime now = rtc.now();
  char buf[100];
  strncpy(buf, "DD.MM.YYYY hh:mm:ss", 100);
  Serial.println(now.format(buf));
  Blynk.virtualWrite(V6, buf);
  delay(2000);
  return;
  
}
void interrupt() {
  
  Serial.println("WakeUp");
 
  
}
void getLux(){
    
    valuephoto = analogRead(photopin);
    valuephoto = valuephoto;
    WidgetLED led1(V5); //register to virtual pin 5
  
    Serial.println(valuephoto);
    Blynk.virtualWrite(V3, valuephoto);
      if(valuephoto < 1000)
        {
        Serial.println("Relay OFF");
        digitalWrite(rele1,LOW);
        led1.on();
        Blynk.setProperty(V5, "color", "#FF0000");
        }
      else
        {
        Serial.println("Relay ON");
        digitalWrite(rele1,HIGH);
        led1.on();
        Blynk.setProperty(V5, "color", "#00FF2E");
  }  
    delay(2000);
    
    return;
}
void getSolo(){
   
    value = analogRead(hygrometer);   //Read analog value 
    value = value;
  
    Serial.print("Soil humidity: ");
    Serial.print(value);
    Serial.println("%");
    Blynk.virtualWrite(V4, value);
    delay(2000);
    return;
}
void getDHT(){
  float tempIni = localTemp;
  float humIni = localHum;
  
  localTemp = dht.readTemperature();                                                                      
  localHum = dht.readHumidity();
  
  Serial.print("TEMPERATURA: ");
  Serial.print(localTemp);
  Serial.println("C");
  Serial.print("UMIDADE: ");
  Serial.print(localHum);
  Serial.println("%");
  delay(2000);
  Blynk.virtualWrite(V1, localTemp);
  Blynk.virtualWrite(V2, localHum);
  if (isnan(localHum) || isnan(localTemp))   // Check if any reads failed and exit early (to try again).
  {
    localTemp = tempIni;
    localHum = humIni;
    return;
  }
}