Well, I like clocks, especially custom made or diy. Here is the code and some photos.

#include "Wire.h"
#include "LiquidCrystal_I2C.h"
 #include "TimeLib.h"
#include "DS1307RTC.h"
 LiquidCrystal_I2C lcd(0x27,20,4);
String time;
 int inPinA = 2;  
int inPinB = 3;  
int valPinB = 0;
 boolean previousStatusPinA = false;
boolean previousStatusPinB = false;
 byte x10[8] = {0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07};   
byte x11[8] = {0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C};
byte x12[8] = {0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F};
byte x13[8] = {0x07,0x07,0x07,0x07,0x07,0x1F,0x1F,0x1F};
byte x14[8] = {0x1C,0x1C,0x1C,0x1C,0x1C,0x1F,0x1F,0x1F};
byte x15[8] = {0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C};
byte x16[8] = {0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07};
byte x17[8] = {0x00,0x00,0x0E,0x0E,0x0E,0x00,0x00,0x00};
 const String dayTitle[8] = { "", "Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sam" };
const String monthTitle[13] = { "", "Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Noi", "Dec" };
const String modeTypeTitle[8] = { "", "Setare ora", "Setare minute", "Setare secunde", "Setare data", "Setare luna", "Setare an +", "Setare an -"};
 void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.begin(20,4);
  lcd.createChar(0, x10);                      
  lcd.createChar(1, x11);                      
  lcd.createChar(2, x12);                      
  lcd.createChar(3, x13);                      
  lcd.createChar(4, x14);                      
  lcd.createChar(5, x15);                      
  lcd.createChar(6, x16);                      
  lcd.createChar(7, x17);                      
   pinMode(inPinA, INPUT);
  pinMode(inPinB, INPUT);
  
  setSyncProvider(RTC.get);
}
 void loop()
{
  if (timeStatus() == timeSet) {
    digitalClockButtons();
    digitalClockDisplay();
  } else {
    setTime(12, 34, 56, 1, 1, 2018);
    time_t t = now();
    RTC.set(t);
  }
  delay(50);
}
 void digitalClockButtons(){
  if (digitalRead(inPinB) == 1 && previousStatusPinB == false) {
    ++valPinB;
    if (valPinB == 8) {
      valPinB = 0;
    }
    previousStatusPinB = true;
    lcd.setCursor(0,3);
    lcd.print("                    ");
    lcd.setCursor(0,3);
    lcd.print(modeTypeTitle[valPinB]);
  } else if (digitalRead(inPinB) == 0 && previousStatusPinB == true) {
    previousStatusPinB = false;
  }
   if (digitalRead(inPinA) == 1 && previousStatusPinA == false && valPinB > 0) {
    int Hour = hour();
    int Min = minute();
    int Sec = second();
    int Day = day();
    int Month = month();
    int Year = year();
     if (valPinB == 1) ++Hour;
    if (valPinB == 2) ++Min;
    if (valPinB == 3) Sec = 0;
    if (valPinB == 4) ++Day;
    if (valPinB == 5) ++Month;
    if (valPinB == 6) ++Year;
    if (valPinB == 7) --Year;
    
    setTime(Hour, Min, Sec, Day, Month, Year);
    time_t t = now();
    RTC.set(t);
    previousStatusPinA = true;
  } else if (digitalRead(inPinA) == 0 && previousStatusPinA == true && valPinB > 0) {
    previousStatusPinA = false;
  }
}
 void digitalClockDisplay(){
    // Display the time using bigNumber
    int row = 0;
    int col = 0;
     bigNumber(getDigit(hour(),2) ,row,col);
    col = col + 3;
    bigNumber(getDigit(hour(),1) ,row,col);
    col = col + 3;
    
    bigNumber(11,row,col);
    col = col + 2;
     
    bigNumber(getDigit(minute(),2) ,row,col);
    col = col + 3;
    bigNumber(getDigit(minute(),1) ,row,col);
    col = col + 3;
     if (valPinB == 0) {
      lcd.setCursor(col,row);
      lcd.print(dayTitle[weekday()] + "  ");
    } else {
      lcd.setCursor(col,row);
      lcd.print(year());
    }
    
    lcd.setCursor(col,row+2);
    lcd.print(getDigit(second(),2));
    lcd.setCursor(col,row+1);
    lcd.print(getDigit(day(),2));
  
    lcd.setCursor(++col,row+2);
    lcd.print(getDigit(second(),1));
    lcd.setCursor(col,row+1);
    lcd.print(getDigit(day(),1));
     ++col;  
    lcd.setCursor(++col,row+1);
    lcd.print(monthTitle[month()]);
}
 // Position a custom big font digit
// position number 'num' starting top left at row 'r', column 'c'
void bigNumber(byte num, byte r, byte c) {
    lcd.setCursor(c,r);
    switch(num) {
      case 0: lcd.write(byte(2)); lcd.write(byte(2)); 
              lcd.setCursor(c,r+1); lcd.write(byte(5)); lcd.write(byte(6)); 
              lcd.setCursor(c,r+2); lcd.write(byte(4)); lcd.write(byte(3)); break;
            
      case 1: lcd.write(byte(0)); lcd.write(byte(1)); 
              lcd.setCursor(c,r+1); lcd.print(" "); lcd.write(byte(5));
              lcd.setCursor(c,r+2); lcd.write(byte(0)); lcd.write(byte(4)); break;
            
      case 2: lcd.write(byte(2)); lcd.write(byte(2)); 
              lcd.setCursor(c,r+1); lcd.write(byte(2)); lcd.write(byte(3)); 
              lcd.setCursor(c,r+2); lcd.write(byte(4)); lcd.write(byte(2)); break;  
            
      case 3: lcd.write(byte(2)); lcd.write(byte(2)); 
              lcd.setCursor(c,r+1); lcd.write(byte(0)); lcd.write(byte(3)); 
              lcd.setCursor(c,r+2); lcd.write(byte(2)); lcd.write(byte(3)); break;  
            
      case 4: lcd.write(byte(1)); lcd.write(byte(0)); 
              lcd.setCursor(c,r+1); lcd.write(byte(4)); lcd.write(byte(3)); 
              lcd.setCursor(c,r+2); lcd.print(" "); lcd.write(byte(6)); break;  
            
      case 5: lcd.write(byte(2)); lcd.write(byte(2)); 
              lcd.setCursor(c,r+1); lcd.write(byte(4)); lcd.write(byte(2)); 
              lcd.setCursor(c,r+2); lcd.write(byte(2)); lcd.write(byte(3)); break;  
              
      case 6: lcd.write(byte(1)); lcd.print(" ");     
              lcd.setCursor(c,r+1); lcd.write(byte(4)); lcd.write(byte(2)); 
              lcd.setCursor(c,r+2); lcd.write(byte(4)); lcd.write(byte(3)); break;  
       case 7: lcd.write(byte(2)); lcd.write(byte(2));
              lcd.setCursor(c,r+1); lcd.print(" "); lcd.write(byte(6)); 
              lcd.setCursor(c,r+2); lcd.print(" "); lcd.write(byte(6)); break;  
       case 8: lcd.write(byte(2)); lcd.write(byte(2)); 
              lcd.setCursor(c,r+1); lcd.write(byte(4)); lcd.write(byte(3)); 
              lcd.setCursor(c,r+2); lcd.write(byte(4)); lcd.write(byte(3)); break;  
   
      case 9: lcd.write(byte(2)); lcd.write(byte(2)); 
              lcd.setCursor(c,r+1); lcd.write(byte(4)); lcd.write(byte(3)); 
              lcd.setCursor(c,r+2); lcd.print(" "); lcd.write(byte(6)); break;  
       case 11: lcd.setCursor(c,r+1); lcd.write(byte(7)); lcd.setCursor(c,r+2); lcd.write(byte(7)); break;
       case 12: lcd.print("   ");
               lcd.setCursor(c,r+1); lcd.print("   ");
               lcd.setCursor(c,r+2); lcd.print("   ");break; 
    } 
}
 // Get a digit of a number 
// used to draw the individual big numbers one at a time
int getDigit(unsigned int number, int digit) {
    for (int i=0; i<digit-1; i++) { 
      number /= 10; 
    }
    return number % 10;
}