Sobrescriba Java System.currentTimeMillis para probar código sensible al tiempo

¿Hay alguna forma, ya sea en código o con argumentos JVM, para anular la hora actual, como se presenta a través deSystem.currentTimeMillis, ¿aparte de cambiar manualmente el reloj del sistema en la máquina host?

Un poco de fondo:

Tenemos un sistema que ejecuta una serie de trabajos contables que giran en gran parte de su lógica en torno a la fecha actual (es decir, el primer día del mes, el primero del año, etc.)

Desafortunadamente, una gran parte del código heredado llama a funciones comonew Date() oCalendar.getInstance(), los cuales eventualmente llaman aSystem.currentTimeMillis.

Para propósitos de prueba, en este momento, estamos atascados con la actualización manual del reloj del sistema para manipular la hora y la fecha en que el código cree que se está ejecutando la prueba.

Así que mi pregunta es:

¿Hay una manera de anular lo que se devuelve porSystem.currentTimeMillis? Por ejemplo, ¿para decirle a la JVM que agregue o reste automáticamente alguna compensación antes de regresar de ese método?

¡Gracias por adelantado!

Respuestas a la pregunta(11)

Su respuesta a la pregunta