Class: DateTime
- Inherits:
-
Object
- Object
- DateTime
- Defined in:
- lib/timesteps/grads.rb,
lib/timesteps/datetime_360day.rb,
lib/timesteps/datetime_noleap.rb,
lib/timesteps/datetime_allleap.rb,
lib/timesteps/datetime_timestep.rb,
lib/timesteps/datetime_parse_timestamp.rb
Defined Under Namespace
Classes: AllLeap, Fixed360Day, NoLeap
Class Method Summary collapse
- .parse_grads_time(time_string) ⇒ Object
-
.parse_timestamp(spec, format: nil, offset: nil, calendar: "standard", tz: nil) ⇒ DateTimeFixedDPY
Parses the given datetime expression and creates an instance.
Instance Method Summary collapse
- #next(*args) ⇒ Object
- #prev(*args) ⇒ Object
- #timeperiod(interval_spec, tz: nil, ends: "[]") ⇒ Object
- #timestep(interval_spec, tz: nil) ⇒ Object
Class Method Details
.parse_grads_time(time_string) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/timesteps/grads.rb', line 5 def self.parse_grads_time (time_string) if time_string.strip =~ /\A(((\d{2})?(:(\d{2}))?Z)?(\d{2}))?(\w{3})(\d{4})\z/i hour = $3 || "00" min = $5 || "00" day = $6 || "01" mon = $7 year = $8 time = DateTime.parse("#{year}#{mon}#{day} #{hour}:#{min}:00") else raise "invalid time format" end return time end |
.parse_timestamp(spec, format: nil, offset: nil, calendar: "standard", tz: nil) ⇒ DateTimeFixedDPY
Parses the given datetime expression and creates an instance. ‘DateTime._parse()` is called internally.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/timesteps/datetime_parse_timestamp.rb', line 17 def self. (spec, format: nil, offset: nil, calendar: "standard", tz: nil) case calendar.downcase.intern when :standard, :gregorian klass = DateTime start = Date::ITALY when :proleptic_gregorian klass = DateTime start = Date::GREGORIAN when :proleptic_julian, :julian klass = DateTime start = Date::JULIAN when :noleap, SYM_365_day klass = DateTime::NoLeap start = nil when :allleap, SYM_366_day klass = DateTime::AllLeap start = nil when SYM_360_day klass = DateTime::Fixed360Day start = nil end if format hash = DateTime._strptime(spec, format) raise "date-time string '#{spec}' doesn't match with the given format '#{format}'" unless hash else if spec =~ /\A([+\-]?\d{1,4})(\-(\d{1,2}))?(\s+(\w{3}|[+\-]\d{1,2}(:?\d{1,2})))?\z/ year = $1.to_i month = $3 ? $3.to_i : 1 mday = 1 rest = $4 hash = DateTime._parse("#{year}-#{month}-#{mday} 00:00:00 #{rest}") else hash = DateTime._parse(spec) end end year, month, day, hour, minute, second, sec_fraction, offset_ = hash.values_at(:year, :mon, :mday, :hour, :min, :sec, :sec_fraction, :offset) hour ||= 0 minute ||= 0 second ||= 0.0 sec_fraction ||= 0.0 if offset_ offset = offset_.quo(86400) else offset ||= 0 end if tz time = tz.local_datetime(year, month, day, hour, minute, second.to_i, sec_fraction.to_r) else if hour == 24 && minute == 0 && second == 0.0 time = klass.new(year, month, day, 23, minute, second + sec_fraction, offset, start) + 1.quo(24) else time = klass.new(year, month, day, hour, minute, second + sec_fraction, offset, start) end end return time end |
Instance Method Details
#next(*args) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/timesteps/datetime_timestep.rb', line 28 def next (*args) case args.size when 1 num = 1 unit = args[0] when 2 num = args[0] unit = args[1] else raise "invalid number of argumets" end return TimeStep.new(unit, since: self).time_at(num) end |
#prev(*args) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/timesteps/datetime_timestep.rb', line 42 def prev (*args) case args.size when 1 num = 1 unit = args[0] when 2 num = args[0] unit = args[1] else raise "invalid number of argumets" end return TimeStep.new(unit, since: self).time_at(-num) end |
#timeperiod(interval_spec, tz: nil, ends: "[]") ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/timesteps/datetime_timestep.rb', line 16 def timeperiod (interval_spec, tz: nil, ends: "[]") case start when Date::ITALY calendar = "standard" when Date::GREGORIAN calendar = "proleptic_gregorian" when Date::JULIAN calendar = "proleptic_julian" end return TimePeriod.new(interval_spec, since: self, calendar: calendar, ends: ends, tz: tz) end |
#timestep(interval_spec, tz: nil) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 |
# File 'lib/timesteps/datetime_timestep.rb', line 4 def timestep (interval_spec, tz: nil) case start when Date::ITALY calendar = "standard" when Date::GREGORIAN calendar = "proleptic_gregorian" when Date::JULIAN calendar = "proleptic_julian" end return TimeStep.new(interval_spec, since: self, calendar: calendar, tz: tz) end |