Ruby: Contacting a timeserver | August 26, 2006-->
August 26, 2006The TIME protocol is an internet protocol defined in http://www.faqs.org/rfcs/rfc868.htmlThis script shows how to connect to an arbitrary TIME-Server using Ruby's Net::Telnet library.
require 'net/telnet' TIME_SERVER = 'ntp2.fau.de' options = { "Host" => TIME_SERVER, "Telnetmode" => false, "Timeout" => 30, "Port" => "time" } # The time is the number of seconds since 00:00 (midnight) 1 January 1900 # GMT, such that the time 1 is 12:00:01 am on 1 January 1900 GMT; this # base will serve until the year 2036. seconds = Net::Telnet.new(options).recv(4).unpack('N').first # The Ruby Time class handles dates with an epoch # starting at midnight january 1 1970 # We have to use the Date class to work with pre-epoch dates. require 'date' def get_seconds_diff_1970_1900 # you might want to cache the Cache result... it won't change ;-) (DateTime.new(1970, 1, 1) - DateTime.new(1900, 1, 1)).to_i * 24 * 60 * 60 end # Convert seconds to a Time object remote_time = Time.at(seconds - \ get_seconds_diff_1970_1900).strftime("%Y-%m-%d %H:%M:%S") print "Time from #{TIME_SERVER} -> #{remote_time}"
- http://attachr.com/3911
- TIME protocol
- www.ntp.org
- http://ntp.isc.org/bin/view/Servers/WebHome
- Wikipedia: Network Time Protocol
- Net::Telnet
- RFC 958
- Ruby Date
Kudos to Peter Cooper who pointed out that we are using the TIME protocol (TCP on port 37) not NTP on UDP port 123!

Peter Cooper says: http://www.rubyinside.com/
That’s the TIME protocol, not NTP. NTP is UDP on port 123 and a lot more complex.