Here is the relevant code
The relevant code is always the bit you left out.
In your case, your mods to ReadTimeDate will cause trouble.
This is the relevant bit:
You can't declare a string locally in the function and then return it as the value of the function. It is created on the stack when you enter the function and it is destroyed when you leave. The pointer to the string will point to random garbage.
It is really not a good idea to use the String library. It has one or more known bugs which make it a losing proposition. You will be much better off to do the string manipulation your self.
So, don't use the string library at all and don't pass temporary variables as the value of a function.