Class: OpenHAB::CoreExt::Java::ZonedDateTime

Inherits:
Object
  • Object
show all
Includes:
Between, Time
Defined in:
lib/openhab/core_ext/java/zoned_date_time.rb

Overview

Extensions to java.time.ZonedDateTime

Class Attribute Summary collapse

Ephemeris Methods collapse

Note:

openHAB's built-in holiday definitions are based on bank holidays, so may give some unexpected results. For example, 2022-12-25 is not Christmas in England because it lands on a Sunday that year, so Christmas is considered to be 2022-12-26. See the source for exact definitions. You can always provide your own holiday definitions with holiday_file or holiday_file!.

Forwards ephemeris helper methods to #to_zoned_date_time provided by the mixed-in class.

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Between

#between?

Class Attribute Details

.nowZonedDateTime (readonly)

Returns:



# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 21

Class Method Details

.parse(text, formatter = nil) ⇒ ZonedDateTime

Parses a string into a ZonedDateTime object.

Parameters:

Returns:



# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 24

Instance Method Details

#+(other) ⇒ ZonedDateTime

Parameters:

Returns:



61
62
63
64
65
66
67
68
69
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 61

def +(other)
  if other.is_a?(Numeric)
    plus(other.seconds)
  elsif other.is_a?(QuantityType)
    plus(other.to_temporal_amount)
  else
    plus(other)
  end
end

#-(other) ⇒ Duration, ZonedDateTime

Parameters:

Returns:

  • (Duration)

    If other responds to #to_zoned_date_time

  • (ZonedDateTime)

    If other is a TemporalAmount or a Time QuantityType



46
47
48
49
50
51
52
53
54
55
56
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 46

def -(other)
  if other.respond_to?(:to_zoned_date_time)
    java.time.Duration.between(other.to_zoned_date_time, self)
  elsif other.is_a?(Numeric)
    minus(other.seconds)
  elsif other.is_a?(QuantityType)
    minus(other.to_temporal_amount)
  else
    minus(other)
  end
end

#<=>(other) ⇒ Integer?

Returns:



228
229
230
231
232
233
234
235
236
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 228

def <=>(other)
  # compare instants, otherwise it will differ by timezone, which we don't want
  # (use eql? if you care about that)
  if other.respond_to?(:to_zoned_date_time)
    to_instant.compare_to(other.to_zoned_date_time(self).to_instant)
  elsif other.respond_to?(:coerce) && (lhs, rhs = other.coerce(self))
    lhs <=> rhs
  end
end

#coerce(other) ⇒ Array?

Converts other to OpenHAB::CoreExt::Java::ZonedDateTime, if possible

Parameters:

Returns:



258
259
260
261
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 258

def coerce(other)
  logger.trace { "Coercing #{self} as a request from #{other.class}" }
  [other.to_zoned_date_time(self), self] if other.respond_to?(:to_zoned_date_time)
end

#days_until(holiday, holiday_file = nil) ⇒ Integer

Calculate the number of days until a specific holiday

Examples:

Time.now.days_until(:christmas) # => 2

Parameters:

  • holiday (String, Symbol)
  • holiday_file (String, nil) (defaults to: nil)

    Optional path to XML file to use for holiday definitions.

Returns:

Raises:

  • (ArgumentError)

    if the holiday isn't valid



217
218
219
220
221
222
223
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 217

def days_until(holiday, holiday_file = nil)
  holiday = holiday.to_s.upcase
  r = ::Ephemeris.get_days_until(*[self, holiday, holiday_file || DSL.holiday_file].compact)
  raise ArgumentError, "#{holiday.inspect} isn't a recognized holiday" if r == -1

  r
end

#holiday(holiday_file = nil) ⇒ Symbol?

Name of the holiday for this date.

Examples:

MonthDay.parse("12-25").holiday # => :christmas

Parameters:

  • holiday_file (String, nil) (defaults to: nil)

    Optional path to XML file to use for holiday definitions.

Returns:



157
158
159
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 157

def holiday(holiday_file = nil)
  ::Ephemeris.get_bank_holiday_name(*[self, holiday_file || DSL.holiday_file].compact)&.downcase&.to_sym
end

#holiday?(holiday_file = nil) ⇒ true, false

Determines if this date is on a holiday.

Parameters:

  • holiday_file (String, nil) (defaults to: nil)

    Optional path to XML file to use for holiday definitions.

Returns:

  • (true, false)


167
168
169
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 167

def holiday?(holiday_file = nil)
  ::Ephemeris.bank_holiday?(*[self, holiday_file || DSL.holiday_file].compact)
end

#in_dayset?(set) ⇒ true, false

Determines if this time is during a specific dayset

Examples:

Time.now.in_dayset?("school")

Parameters:

Returns:

  • (true, false)


202
203
204
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 202

def in_dayset?(set)
  ::Ephemeris.in_dayset?(set.to_s, self)
end

#next_holiday(holiday_file = nil) ⇒ Symbol

Name of the closest holiday on or after this date.

Parameters:

  • holiday_file (String, nil) (defaults to: nil)

    Optional path to XML file to use for holiday definitions.

Returns:



177
178
179
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 177

def next_holiday(holiday_file = nil)
  ::Ephemeris.get_next_bank_holiday(*[self, holiday_file || DSL.holiday_file].compact).downcase.to_sym
end

#to_dateDate

Returns:



88
89
90
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 88

def to_date
  Date.new(year, month_value, day_of_month)
end

#to_fFloat

The number of seconds since the Unix epoch.

Returns:



85
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 85

delegate %i[to_i to_f] => :to_instant

#to_iInteger

The number of seconds since the Unix epoch.

Returns:



# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 71

#to_instantInstant

Converts this object to an Instant

Returns:



242
243
244
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 242

def to_instant(_context = nil)
  raw_to_instant
end

#to_local_date(_context = nil) ⇒ LocalDate

Returns:



93
94
95
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 93

def to_local_date(_context = nil)
  toLocalDate
end

#to_local_time(_context = nil) ⇒ LocalTime

Returns:



35
36
37
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 35

def to_local_time(_context = nil)
  toLocalTime
end

#to_monthMonth

Returns:



40
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 40

alias_method :to_month, :month

#to_month_dayMonthDay

Returns:



98
99
100
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 98

def to_month_day
  MonthDay.of(month, day_of_month)
end

#to_timeTime

Returns:



# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 104

#to_zoned_date_time(context = nil) ⇒ self

Parameters:

Returns:

  • (self)


111
112
113
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 111

def to_zoned_date_time(context = nil) # rubocop:disable Lint/UnusedMethodArgument
  self
end

#today?true, false

Returns true if the date, converted to the system time zone, is today.

This is the equivalent of checking if the current datetime is between midnight and end of the day of the system time zone.

Returns:

  • (true, false)


132
133
134
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 132

def today?
  with_zone_same_instant(ZoneId.system_default).to_local_date == LocalDate.now
end

#tomorrow?true, false

Returns true if the date, converted to the system time zone, is tomorrow.

Returns:

  • (true, false)


141
142
143
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 141

def tomorrow?
  with_zone_same_instant(ZoneId.system_default).to_local_date == LocalDate.now + 1
end

#weekend?true, false

Determines if this time is during a weekend.

Examples:

Time.now.weekend?

Returns:

  • (true, false)


189
190
191
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 189

def weekend?
  ::Ephemeris.weekend?(self)
end

#yesterday?true, false

Returns true if the date, converted to the system time zone, is yesterday.

Returns:

  • (true, false)


120
121
122
# File 'lib/openhab/core_ext/java/zoned_date_time.rb', line 120

def yesterday?
  with_zone_same_instant(ZoneId.system_default).to_local_date == LocalDate.now - 1
end