Define a separate non-terminal for Time, and define DateExt nonterminal as 'Date + TimeOpt,
where TimeOpt.Rule = Time | Empty;
On a general note, I suggest to treat dates and strings as quoted strings. The content of the string is checked in ValidateToken event for the strings. Your code should analyze the content and if it is date, replace the token.Terminal value with Date terminal.
Roman