code: def gpsFromUTC(year, month, day, hour, min, sec, leapSecs=14):
      
      secFract = sec % 1
      epochTuple = gpsEpoch + (-1, -1, 0)
      t0 = time.mktime(epochTuple)
      t = time.mktime((year, month, day, hour, min, sec, -1, -1, 0)) 
      # Note: time.mktime strictly works in localtime and to yield UTC, it should be
      #       corrected with time.timezone
      #       However, since we use the difference, this correction is unnecessary.
      # Warning:  trouble if daylight savings flag is set to -1 or 1 !!!
      t = t + leapSecs   
      tdiff = t - t0
      gpsSOW = (tdiff % secsInWeek)  + secFract
      gpsWeek = int(math.floor(tdiff/secsInWeek)) 
      gpsDay = int(math.floor(gpsSOW/secsInDay))
      gpsSOD = (gpsSOW % secsInDay) 
      return (gpsWeek, gpsSOW, gpsDay, gpsSOD)
docs: converts UTC to: gpsWeek, secsOfWeek, gpsDay, secsOfDay
  
      a good reference is:  http://www.oc.nps.navy.mil/~jclynch/timsys.html
  
      This is based on the following facts (see reference above):
  
      GPS time is basically measured in (atomic) seconds since 
      January 6, 1980, 00:00:00.0  (the GPS Epoch)
      
      The GPS week starts on Saturday midnight (Sunday morning), and runs
      for 604800 seconds. 
  
      Currently, GPS time is 13 seconds ahead of UTC (see above reference).
      While GPS SVs transmit this difference and the date when another leap
      second takes effect, the use of leap seconds cannot be predicted.  This
      routine is precise until the next leap second is introduced and has to be
      updated after that.  
  
      SOW = Seconds of Week
      SOD = Seconds of Day
  
      Note:  Python represents time in integer seconds, fractions are lost!!!