FUNCTION TimeShift, from_time=from_time, from_d2000=from_d2000, from_jd=from_jd,    $
    from_mjd=from_mjd, from_njd=from_njd,   $
    to_time=to_time, to_d2000=to_d2000, to_jd=to_jd, to_mjd=to_mjd, to_njd=to_njd

    @compile_opt.pro        ; On error, return to caller

time    = IsType(from_time  , /defined)
d2000   = IsType(from_d2000 , /defined)
jd      = IsType(from_jd    , /defined)
mjd     = IsType(from_mjd   , /defined)
njd     = IsType(from_njd   , /defined)

InitVar, to_time , /key
InitVar, to_d2000, /key
InitVar, to_jd   , /key
InitVar, to_mjd  , /key
InitVar, to_njd  , /key

TimeOrigin, t_old, /get,    $
    time    = time  ,   $
    d2000   = d2000 ,   $
    jd      = jd    ,   $
    mjd     = mjd   ,   $
    njd     = njd

TimeOrigin, t_new, /get,    $
    time    = to_time   ,   $
    d2000   = to_d2000  ,   $
    jd      = to_jd     ,   $
    mjd     = to_mjd    ,   $
    njd     = to_njd

dt = TimeOp(/subtract,t_new,t_old)

case 1 of
time : RETURN, TimeOp(/subtract, from_time , dt)
d2000: RETURN, TimeOp(/subtract, from_d2000, dt)
jd   : RETURN, TimeOp(/subtract, from_jd, dt)
mjd  : RETURN, TimeOp(/subtract, from_mjd  , dt)
njd  : RETURN, TimeOp(/subtract, from_njd  , dt)
ENDCASE

END