Class: Time

Inherits:
Object show all
Defined in:
lib/ext/time.rb

Instance Method Summary collapse

Instance Method Details

#change(options) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/ext/time.rb', line 2

def change(options)
  new_year  = options.fetch(:year, year)
  new_month = options.fetch(:month, month)
  new_day   = options.fetch(:day, day)
  new_hour  = options.fetch(:hour, hour)
  new_min   = options.fetch(:min, options[:hour] ? 0 : min)
  new_sec   = options.fetch(:sec, (options[:hour] || options[:min]) ? 0 : sec)

  if new_nsec = options[:nsec]
    fail ArgumentError, "Can't change both :nsec and :usec at the same time: #{options.inspect}" if options[:usec]
    new_usec = Rational(new_nsec, 1000)
  else
    new_usec  = options.fetch(:usec, (options[:hour] || options[:min] || options[:sec]) ? 0 : Rational(nsec, 1000))
  end

  if utc?
    ::Time.utc(new_year, new_month, new_day, new_hour, new_min, new_sec, new_usec)
  elsif zone
    ::Time.local(new_year, new_month, new_day, new_hour, new_min, new_sec, new_usec)
  else
    fail ArgumentError, 'argument out of range' if new_usec >= 1_000_000
    ::Time.new(new_year, new_month, new_day, new_hour, new_min, new_sec + (new_usec.to_r / 1_000_000), utc_offset)
  end
end

#seconds_since_midnightObject



27
28
29
# File 'lib/ext/time.rb', line 27

def seconds_since_midnight
  to_i - change(hour: 0).to_i + (usec / 1.0e+6)
end