#!/usr/bin/env ruby class GPSTime def GPSTime::itow(utc = Time::now) sec = utc - Time::gm(1980, 1, 6, 0, 0, 0) if sec < 0 then return nil end [ Time::gm(1981, 7, 1, 0, 0, 0), Time::gm(1982, 7, 1, 0, 0, 0), Time::gm(1983, 7, 1, 0, 0, 0), Time::gm(1985, 7, 1, 0, 0, 0), Time::gm(1988, 1, 1, 0, 0, 0), Time::gm(1990, 1, 1, 0, 0, 0), Time::gm(1991, 1, 1, 0, 0, 0), Time::gm(1992, 7, 1, 0, 0, 0), Time::gm(1993, 7, 1, 0, 0, 0), Time::gm(1994, 7, 1, 0, 0, 0), Time::gm(1996, 1, 1, 0, 0, 0), Time::gm(1997, 7, 1, 0, 0, 0), Time::gm(1999, 1, 1, 0, 0, 0), Time::gm(2006, 1, 1, 0, 0, 0), Time::gm(2009, 1, 1, 0, 0, 0) ].each{|item| if utc > item then sec += 1 end} cycle = (sec / (1024 * 7 * 24 * 60 * 60)).to_i sec = sec % (1024 * 7 * 24 * 60 * 60) week = (sec / (7 * 24 * 60 * 60)).to_i [cycle, week, sec % (7 * 24 * 60 * 60)] end end if $0 == __FILE__ then if ARGV.empty? then p GPSTime::itow else require 'time' p GPSTime::itow(Time::parse(ARGV.join(' '))) end end