Dado que ya tiene una respuesta a lo que está mal con su código, puedo brindarle otra perspectiva sobre cómo puede jugar con fechas y horas en general, y resolver su problema específicamente.
A menudo te encuentras planteando un problema en términos de solución. Esta es solo una de las razones por las que terminas con un código imperativo . Sin embargo, es genial si funciona; hay otras alternativas, posiblemente más mantenibles. Uno de ellos es un código declarativo . El punto es preguntar qué necesitas, en lugar de cómo llegar allí.
En su caso particular, esto puede parecerse a lo siguiente. Primero, necesitas descubrir qué es lo que estás buscando, es decir, descubrir abstracciones. En su caso, parece que necesita una cita . No cualquier fecha, sino la que tiene alguna representación estándar. Digamos, fecha ISO8601. Hay al menos dos implementaciones: la primera es una fecha analizada desde una cadena con formato ISO8601 (o una cadena en cualquier otro formato en realidad), y la segunda es una fecha futura que es un día después. Por lo tanto, todo el código podría verse así:
(new Future(
new DateTimeParsedFromISO8601('2009-09-30 20:24:00'),
new OneDay()
))
->value();
Para obtener más ejemplos con malabares de fecha y hora, consulte este .