gaining accurate time on time sensitive measurements.

well i have figured somethings out and have what i want working.... however, my time jumps every once and a while.... does anything jump out that screams dont do that, that slows everything down???

#include <Adafruit_GPS.h>  //Call Libraries
#include <SoftwareSerial.h>
#include<SPI.h>
#include<SD.h>

SoftwareSerial mySerial(8, 7);  //Set pins on GPS unit
Adafruit_GPS GPS(&mySerial);

File logfile;
uint32_t timer = millis();
int n=0;
void setup()  
{
  Serial.begin(115200);
  Serial.println("Hello. Let' start the test.");
  GPS.begin(9600);
  pinMode(10,OUTPUT);
  if(!SD.begin(10)){
    Serial.println("SD card not found... Ending program.");
    return;
  }
  
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);   
  GPS.sendCommand(PGCMD_ANTENNA);
  delay(1000);
  mySerial.println(PMTK_Q_RELEASE);
  while(n==0){
    char c = GPS.read();
    if (GPS.newNMEAreceived()) {  
      if (!GPS.parse(GPS.lastNMEA()))
        n=0;
    }
    if (millis() - timer > 2000) { 
      timer = millis(); // reset the timer
      if(GPS.hour!=0 && GPS.day!=0){
        Serial.println("Let us get started...");
        File dataFile=SD.open("Log02.txt",FILE_WRITE);
        if(dataFile){
          dataFile.print("\nTime: ");
          dataFile.print(GPS.hour, DEC); dataFile.print(':');
          dataFile.print(GPS.minute, DEC); dataFile.print(':');
          dataFile.print(GPS.seconds, DEC); dataFile.print('.');
          dataFile.println(GPS.milliseconds);
          dataFile.print("Date: ");
          dataFile.print(GPS.day, DEC); dataFile.print('/');
          dataFile.print(GPS.month, DEC); dataFile.print("/20");
          dataFile.println(GPS.year, DEC);
          dataFile.println("Reading,Time,Sensor1,Sensor2,Sensor3,Sensor4");
          dataFile.close();
          Serial.println("Begin");
          n=5;
        }
      }
    }
  }
}
int S1=0;
int S2=0;
int S3=0;
int S4=0;
unsigned int reading=0;
void loop(){
  if(n==5){
   if(millis()-timer>=50){
     timer=millis();
     S1=analogRead(0);
     S2=analogRead(1);
     S3=analogRead(2);
     S4=analogRead(3);
     reading=reading+1;
     File dataFile=SD.open("Log02.txt",FILE_WRITE);
     if(dataFile){
     dataFile.print(reading);
     dataFile.print(",");
     dataFile.print(timer);
     dataFile.print(",");
     dataFile.print(S1);
     dataFile.print(",");
     dataFile.print(S2);
     dataFile.print(",");
     dataFile.print(S3);
     dataFile.print(",");
     dataFile.println(S4);
     dataFile.close();}
    }
  }
}