// https://forum.arduino.cc/t/ds3231-24-hours-time-format/981645

#include <Wire.h>
#include <DS3231.h>

 DS3231 clk;
 
 int format;
 int hours;
 int minutes;
 int seconds;
 String time_period = "";
 
 bool h12Flag;
 bool pmFlag;
 
 void time_setup()
 {  
    Serial.println(" ");
    Serial.println("DS3231 based Clock and Calender");
    
    //Set up the preferred Time Format (12 hrs / 24 hrs)
    Serial.println("Select the time format (12/24) : ");
    while (Serial.available() == 0) { }                             // Wait for user input
    format = Serial.parseInt();
    Serial.print("Time format : ");
    Serial.print(format);                                           //Use this to set 12/24 clock cycle
    Serial.println(" hrs");

    //Take in the time values from the user
    Serial.println("Enter the hours : ");
    while(Serial.available() == 0) { }                              // Wait for user input
    hours = Serial.parseInt();
    
    Serial.println("Enter the minutes : ");
    while(Serial.available() == 0) { }                               // Wait for user input
    minutes = Serial.parseInt();
    
    Serial.println("Enter the seconds : ");
    while(Serial.available() == 0) { }                              // Wait for user input 
    seconds = Serial.parseInt();
    
    //If 12 hrs clock cycle, AM or PM?
    if(format == 12)
    {
      Serial.println("Time Period (AM/PM) : ");
      while(Serial.available() == 0) { }                            // Wait for user input
      time_period = Serial.readString();
    }


    
    //Print the values
    Serial.println("-------------------------------------------------------------");
    Serial.print("The RTC is set to : ");
    Serial.print(hours);
    Serial.print(" : ");
    Serial.print(minutes);
    Serial.print(" : ");
    Serial.print(seconds);
    if(format == 12)
    {
      Serial.print(" ");
      Serial.println(time_period);
    }
    else
      Serial.println(" ");
    Serial.println("-------------------------------------------------------------");
 }

 void RTC_setup()
 {
    clk.setHour(hours);
    clk.setMinute(minutes);
    clk.setSecond(seconds);
    if (format==12)
      clk.setClockMode(true);
    else
      clk.setClockMode(false);   
    delay(1000);
    Serial.println("RTC has be set with new time.");
    Serial.println("-------------------------------------------------------------");
    Serial.println("The DS3231 time is : ");
 }

 void RTC_display()
 {
    /*
     * This block displays the time in the serial monitor.
     */
    delay(1000);
    
    hours   = clk.getHour(h12Flag,pmFlag);
    minutes = clk.getMinute();
    seconds = clk.getSecond();

    // Print Hours
    if(hours<10)
      Serial.print(" 0");
    else
      Serial.print(" ");
    Serial.print(hours);
    Serial.print(" : ");

    // Print Minutes
    if(minutes<10)
      Serial.print("0");
    Serial.print(minutes);
    Serial.print(" : ");

    // Print Seconds
    if(seconds<10)
      Serial.print("0");
    Serial.print(seconds);


    //Print AM/PM
    if(format == 12)
    {
      Serial.print(" ");
      Serial.println(time_period);
    }
    else
      Serial.println(" ");

   // Reset AM/PM during clock transitions
    if (format == 12 && hours == 11 && minutes == 59 && seconds ==59)
    {
      if ( time_period == "AM")
        time_period = "PM";
      else if ( time_period == "PM")
        time_period = "AM";
    }
     
 }

 void setup()
 {  
    //Set the Baud Rate
    Serial.begin(9600);
    time_setup();
    RTC_setup();
    
 }

 void loop()
 {
    RTC_display();
 }
GND5VSDASCLSQWRTCDS1307+