# # timezone.rb # written by Shin'ya Adzumi/ICHIGO-DENPA-CLUB # module TimeZone =begin ZONES = { 'gmt' => 0 , 'ut' => 0 , 'utc' => 0 , 'wet' => 0 , 'wat' => -60 , 'at' => -120 , 'adt' => -180 , 'ast' => -240 , 'edt' => -240 , 'est' => -300 , 'cdt' => -300 , 'cst' => -360 , 'mdt' => -360 , 'mst' => -420 , 'pdt' => -420 , 'pst' => -480 , 'ydt' => -480 , 'yst' => -540 , 'hst' => -540 , 'ahst' => -600 , 'cat' => -600 , 'hst' => -600 , 'nt' => -660 , 'idlw' => -720 , 'cet' => 60 , 'fwt' => 60 , 'met' => 60 , 'mewt' => 60 , 'swt' => 60 , 'bst' => 60 , 'eet' => 120 , 'mest' => 120 , 'mesz' => 120 , 'sst' => 120 , 'fst' => 120 , 'bt' => 180 , 'zp4' => 240 , 'zp5' => 300 , 'zp6' => 360 , 'wadt' => 360 , 'wast' => 420 , 'cct' => 480 , 'jst' => 540 , 'eadt' => 540 , 'east' => 600 , 'gst' => 600 , 'nzdt' => 660 , 'idle' => 720 , 'nzst' => 720 , 'nzt' => 720 , } DST = [ 'bst','adt','edt','cdt','mdt','pdt','ydt','hdt','mest','mesz', 'sst','fst','wadt','eadt','nzdt', ] =end ZONES = { 'ut' => 0 , 'gmt'=> 0 , 'est'=> -300 , 'edt'=> -240 , 'cst'=> -360 , 'cdt'=> -300 , 'mst'=> -420 , 'mdt'=> -360 , 'pst'=> -480 , 'pdt'=> -420 , 'uct' => 0 , 'utc'=> 0 , 'jst' => 540 , } DST = [ 'edt','cdt','mdt','pdt', ] def to_h(str) to_m(str).to_f / 60 end def to_m(str) s = str.downcase if( s =~ /^[a-im-z]$/ ) then return ('mlkihgfedcbaznopqrstuvwsy'.index(s)-12)*60 elsif( s =~ /^([+-])(\d{2}):?(\d{2})?$/ ) then h = ($2.to_i*60) h = h+$3.to_i unless $3.nil? h = -h if $1 == '-' return h elsif( ZONES.key? s ) then return ZONES[s] end raise ArgumentError, 'invalid timezone' return nil end def to_s(str) to_m(str) * 60 end def is_dst?(str) s = str.downcase if( DST.include? s ) then true else false end end module_function :to_h,:to_m,:to_s,:is_dst? end if __FILE__ == $0 then p TimeZone::to_h ARGV[0] p TimeZone::to_m ARGV[0] p TimeZone::to_s ARGV[0] p TimeZone::is_dst? ARGV[0] end