Doing lots of printing to Serial() will cause software serial to miss characters.
Miss one character in a NMEA sentence and it will be rejected by the encode().
You need to read characters for the GPS, and encode() the characters, until the GPS library reports that there has been update to the time and date, then and only then print stuff out.