D. John said that he would be 21 the following day.
Explanation
Indirect Speech is used to report something in our own words.
To change future tense in indirect speech, remove inverted commas and use 'that' as a conjunction.
Both shall and will normally become would. 'Tomorrow' is changed to 'the following day'
In the given sentence, 'shall' cannot be changed to should as the speech is not reported by the original speaker. It would change to 'would'. Thus, option C is the correct answer according to the rules.