class Wikidata::Property::Time
Constants
- DATE_PRECISION
- DAYS_IN_MONTH
Protected Class Methods
leap_year?(year)
click to toggle source
# File lib/wikidata/property/time.rb, line 140 def self.leap_year? year (year % 4 == 0) && !(year % 100 == 0) || (year % 400 == 0) end
Public Instance Methods
after()
click to toggle source
# File lib/wikidata/property/time.rb, line 60 def after value.after end
before()
click to toggle source
# File lib/wikidata/property/time.rb, line 64 def before value.before end
date()
click to toggle source
# File lib/wikidata/property/time.rb, line 37 def date return @_date if @_date d = Hash[[:year, :month, :day, :hour, :min, :sec].zip( value.time.scan(/(-?\d+)-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})/).first.map(&:to_i) )] [:month, :day].each do |k| d[k] = (d[k] == 0 ? 1 : d[k]) end @_date ||= DateTime.new *d.values end
precision()
click to toggle source
# File lib/wikidata/property/time.rb, line 52 def precision DATE_PRECISION[value.precision.to_i][:value] end
precision_key()
click to toggle source
# File lib/wikidata/property/time.rb, line 56 def precision_key DATE_PRECISION[value.precision.to_i][:key] end
range()
click to toggle source
# File lib/wikidata/property/time.rb, line 68 def range return @_range if @_range if before.to_i == 0 && after.to_i == 0 && precision_key send(:"#{precision_key}_range") else generic_range end end
timestamp()
click to toggle source
# File lib/wikidata/property/time.rb, line 48 def timestamp date.to_time.utc.to_i end
Protected Instance Methods
century_range()
click to toggle source
# File lib/wikidata/property/time.rb, line 89 def century_range century = date.year / 100 if date.year > 0 from = DateTime.new((century - 1) * 100 + 1, 1, 1, 0, 0, 0) to = DateTime.new(century * 100, 12, 31, 23, 59, 59) else from = DateTime.new(century * 100, 1, 1, 0, 0, 0) to = DateTime.new((century + 1) * 100 - 1, 12, 31, 23, 59, 59) end @_range ||= (from..to) end
day_range()
click to toggle source
# File lib/wikidata/property/time.rb, line 130 def day_range from = DateTime.new(date.year, date.month, date.day, 0, 0, 0) to = DateTime.new(date.year, date.month, date.day, 23, 59, 59) @_range ||= (from..to) end
decade_range()
click to toggle source
# File lib/wikidata/property/time.rb, line 107 def decade_range decade = date.year.round(-1) if decade > 0 from = DateTime.new(decade, 1, 1, 0, 0, 0) to = DateTime.new(decade + 9, 12, 31, 23, 59, 59) else from = DateTime.new(decade - 9, 1, 1, 0, 0, 0) to = DateTime.new(decade, 12, 31, 23, 59, 59) end @_range ||= (from..to) end
generic_range()
click to toggle source
# File lib/wikidata/property/time.rb, line 80 def generic_range from = before > 0 ? timestamp - (before.to_i * precision) : timestamp to = after > 0 ? timestamp + (after.to_i * precision) : timestamp @_range ||= (to_datetime ::Time.at(from).utc)..(to_datetime ::Time::at(to).utc) end
month_range()
click to toggle source
# File lib/wikidata/property/time.rb, line 119 def month_range if date.month == 2 && self.class.leap_year?(date.year) last_day = 29 else last_day = DAYS_IN_MONTH[date.month] end from = DateTime.new(date.year, date.month, 1, 0, 0, 0) to = DateTime.new(date.year, date.month, last_day, 23, 59, 59) @_range ||= (from..to) end
to_datetime(t)
click to toggle source
# File lib/wikidata/property/time.rb, line 136 def to_datetime(t) DateTime.new t.year, t.month, t.day, t.hour, t.min, t.sec end
year_range()
click to toggle source
# File lib/wikidata/property/time.rb, line 101 def year_range from = DateTime.new(date.year, 1, 1, 0, 0, 0) to = DateTime.new(date.year, 12, 31, 23, 59, 59) @_range ||= (from..to) end