How much time is left?
After sitting on this for... 8 hours, I realized singular() can, and probably should, use the replaceLast() method, to encourage code re-use at a very small expense of efficiency (which isn't the goal here anyways):

private static String singular(ChronoUnit unit) {
    return replaceLast(unit.toString(), "s", "");
}