It has been my experience from about 2 years ago, that if you read from the clock too frequently it slows it down. That might have been with the SPI DS3232 though - my memory is a bit hazy. But you really don't need to read it that frequently anyway.
The DS3232 is SPI; the DS3231 is I2C.
Either one of them can be configured to produce a 1Hz squarewave which you can connect to a pin to cause an interrupt. When your program first starts you can read the clock and then use the Time library to convert the date/time to a time_t which is the number of seconds since 1 Jan 1970. Then all you do is increment that value at each interrupt from the 1Hz signal and when needed use the Time library to convert the time_t value back to a date/time.
The major issue, as robtillaart has already asked, is why are you using soft I2C? What is wrong with the hardware I2C?
Pete