class MailParser::RFC2822::DateTime

Attributes

day[R]
hour[R]
min[R]
month[R]
sec[R]
year[R]
zone[R]

Public Class Methods

new(year, month, day, hour, min, sec, zone_or_offset) click to toggle source
# File lib/mailparser/rfc2822.rb, line 159
def initialize(year, month, day, hour, min, sec, zone_or_offset)
  y, m, d, h, mi, s = year.to_i, month.to_i, day.to_i, hour.to_i, min.to_i, sec.to_i
  raise ArgumentError, "invalid year" if y < 0 or 9999 < y
  raise ArgumentError, "invalid month" if m < 1 or 12 < m
  raise ArgumentError, "invalid day of the month" if d < 1
  if [1,3,5,7,8,10,12].include? m
    raise ArgumentError, "invalid day of the month" if d > 31
  elsif [4,6,9,11].include? m
    raise ArgumentError, "invalid day of the month" if d > 30
  else # month == 2
    if y%4 == 0 and (y%100 !=0 or y%400 == 0)
      raise ArgumentError, "invalid day of the month" if d > 29
    else
      raise ArgumentError, "invalid day of the month" if d > 28
    end
  end
  raise ArgumentError, "invalid hour" if h > 23
  raise ArgumentError, "invalid minute" if mi > 59
  raise ArgumentError, "invalid second" if s > 60
  @year, @month, @day, @hour, @min, @sec = y, m, d, h, mi, s
  if zone_or_offset.is_a? Integer
    offset = zone_or_offset
    @zone_sec = offset
    @zone = format("%03d%02d", offset/3600, offset%3600/60).sub(/^0/, '+')
    return
  end
  zone = zone_or_offset
  if zone =~ /^[+-]\d\d(\d\d)$/ then
    raise ArgumentError, "invalid zone" if $1.to_i > 59
  else
    zone = (zone && ZONE[zone.upcase]) || "-0000"
  end
  z = zone[1,4].to_i
  @zone = zone
  @zone_sec = z/100*3600 + z%100*60
  @zone_sec = -@zone_sec if zone[0] == ?-
end
now() click to toggle source
# File lib/mailparser/rfc2822.rb, line 154
def self.now
  t = Time.now
  self.new(t.year, t.month, t.day, t.hour, t.min, t.sec, t.utc_offset)
end

Public Instance Methods

time() click to toggle source
# File lib/mailparser/rfc2822.rb, line 199
def time()
  t = Time.utc(@year, @month, @day, @hour, @min, @sec)
  Time.at(t.to_i - @zone_sec)
end