def calc_dt(utc)
      return Rational(Const::TT_TAI, 1000) - @utc_tai - @dut1 unless @utc_tai == 0
      y = utc.year + (utc.month - 0.5) / 12
      case
      when                     utc.year <  -500; dt = calc_dt_before_m500(y)
      when -500 <= utc.year && utc.year <   500; dt = calc_dt_before_500(y)
      when  500 <= utc.year && utc.year <  1600; dt = calc_dt_before_1600(y)
      when 1600 <= utc.year && utc.year <  1700; dt = calc_dt_before_1700(y)
      when 1700 <= utc.year && utc.year <  1800; dt = calc_dt_before_1800(y)
      when 1800 <= utc.year && utc.year <  1860; dt = calc_dt_before_1860(y)
      when 1860 <= utc.year && utc.year <  1900; dt = calc_dt_before_1900(y)
      when 1900 <= utc.year && utc.year <  1920; dt = calc_dt_before_1920(y)
      when 1920 <= utc.year && utc.year <  1941; dt = calc_dt_before_1941(y)
      when 1941 <= utc.year && utc.year <  1961; dt = calc_dt_before_1961(y)
      when 1961 <= utc.year && utc.year <  1986; dt = calc_dt_before_1986(y)
      when 1986 <= utc.year && utc.year <  2005; dt = calc_dt_before_2005(y)
      when 2005 <= utc.year && utc.year <  2050; dt = calc_dt_before_2050(y)
      when 2050 <= utc.year && utc.year <= 2150; dt = calc_dt_until_2150(y)
      when 2150 <  utc.year                    ; dt = calc_dt_after_2150(y)
      end
      return dt
    rescue => e
      raise
    end
def calc_dt(utc)
      return Rational(Const::TT_TAI, 1000) - @utc_tai - @dut1 unless @utc_tai == 0
      y = utc.year + (utc.month - 0.5) / 12
      case
      when                     utc.year <  -500; dt = calc_dt_before_m500(y)
      when -500 <= utc.year && utc.year <   500; dt = calc_dt_before_500(y)
      when  500 <= utc.year && utc.year <  1600; dt = calc_dt_before_1600(y)
      when 1600 <= utc.year && utc.year <  1700; dt = calc_dt_before_1700(y)
      when 1700 <= utc.year && utc.year <  1800; dt = calc_dt_before_1800(y)
      when 1800 <= utc.year && utc.year <  1860; dt = calc_dt_before_1860(y)
      when 1860 <= utc.year && utc.year <  1900; dt = calc_dt_before_1900(y)
      when 1900 <= utc.year && utc.year <  1920; dt = calc_dt_before_1920(y)
      when 1920 <= utc.year && utc.year <  1941; dt = calc_dt_before_1941(y)
      when 1941 <= utc.year && utc.year <  1961; dt = calc_dt_before_1961(y)
      when 1961 <= utc.year && utc.year <  1986; dt = calc_dt_before_1986(y)
      when 1986 <= utc.year && utc.year <  2005; dt = calc_dt_before_2005(y)
      when 2005 <= utc.year && utc.year <  2050; dt = calc_dt_before_2050(y)
      when 2050 <= utc.year && utc.year <= 2150; dt = calc_dt_until_2150(y)
      when 2150 <  utc.year                    ; dt = calc_dt_after_2150(y)
      end
      return dt
    rescue => e
      raise
    end
=========================================================================
 ΔT の計算

 * うるう秒調整が明確な場合は、うるう秒総和を使用した計算
 * そうでない場合は、NASA の計算式による計算

 @param:  utc  (Time Object)
 @return: dt   (sec)
=========================================================================