Hi John,
The Stack Overflow essentially means that you have a method somewhere that is calling itself forever and forever. So essentially a pattern like
public void someMethod() {
someMethod()
}
For the first method call to finish, it needs to wait for the inner method call to finish. For the inner method call to finish, it needs to wait for the inner-inner method call to finish and so on ad infinum. So no method calls finish and you eventually run out of memory.
In this case, the issue seems to be caused by the differenceInYears() method: Consider a case where the two dates under comparison have the same year. You never enter the if-block, but always just keep on calling the other date's differenceInYears() method. This keep going until Java runs out of memory and you get the StackOverflowError.
It's likely that this issue also prevents you from passing the final test. If the code still won't pass the tests after fixing the StackOverflowError, please create a new paste and I'll take a further look :)
-Leo