millis() returns an unsigned long integer, and C++ guarantees that
arithmetics on this type work modulo (ULONG_MAX+1). This behavior
ensures that computing a delay as
millis() - previousMillis
yields the correct result across millis() rollover events, as long as
the time actually elapsed is less than about 49.7 days.
Improve the time information by tracking from when a sentence is received, rather than when it is parsed. Track last valid Date, Time, and Fix separately.