1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
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}"