Spec-Zone.ru › Ruby on Rails 4.1

класс ActiveSupport::TimeZone

Родитель:
Объект
Включенные модули:

Класс TimeZone служит оболочкой над объектами TZInfo::Timezone. Он позволяет:

  • Ограничить набор зон, предоставляемых TZInfo, до осмысленного подмножества из 146 зон.

  • Получать и отображать зоны с более дружественным названием (например, «Восточное время (США и Канада)» вместо «America/New_York»).

  • Лениво загружать объекты TZInfo::Timezone только при необходимости.

  • Создавать объекты ActiveSupport::TimeWithZone через методы TimeZone local, parse, at и now.

Если вы установите config.time_zone в приложении Rails, вы можете получить доступ к этому объекту TimeZone через Time.zone:

# application.rb:
class Application < Rails::Application
  config.time_zone = 'Eastern Time (US & Canada)'
end

Time.zone      # => #<TimeZone:0x514834...>
Time.zone.name # => "Eastern Time (US & Canada)"
Time.zone.now  # => Sun, 18 May 2008 14:30:44 EDT -04:00

Версия TZInfo, включенная в Active Support, содержит только определения, необходимые для поддержки зон, определенных классом TimeZone. Если вам нужно использовать зоны, которые не определены классом TimeZone, вам необходимо установить gem TZInfo (если локально установлен недавняя версия gem, она будет использоваться вместо встроенной версии.)

Константы

MAPPING

Ключами являются имена зон Rails TimeZone, значениями — идентификаторы TZInfo.

UTC_OFFSET_WITHOUT_COLON
UTC_OFFSET_WITH_COLON

Атрибуты

name[R]
tzinfo[R]

Публичные методы класса

[](arg) Показать исходный код

Находит конкретный объект часового пояса. Если аргумент — строка, она интерпретируется как имя часового пояса для поиска. Если это числовое значение, это либо смещение по часам, либо смещение по секундам часового пояса для поиска. (Будет возвращен первый объект с этим смещением.) Возвращает nil , если такой часовой пояс не известен системе.

# File activesupport/lib/active_support/values/time_zone.rb, line 395
def [](arg)
  case arg
    when String
    begin
      @lazy_zones_map[arg] ||= create(arg).tap { |tz| tz.utc_offset }
    rescue TZInfo::InvalidTimezoneIdentifier
      nil
    end
    when Numeric, ActiveSupport::Duration
      arg *= 3600 if arg.abs <= 13
      all.find { |z| z.utc_offset == arg.to_i }
    else
      raise ArgumentError, "invalid argument to TimeZone[]: #{arg.inspect}"
  end
end
all() Показать исходный код

Возвращает массив всех объектов TimeZone. В большинстве случаев на каждый часовой пояс приходится несколько объектов TimeZone для того, чтобы пользователям было проще найти свой часовой пояс.

# File activesupport/lib/active_support/values/time_zone.rb, line 379
def all
  @zones ||= zones_map.values.sort
end
create(name, utc_offset = nil, tzinfo = nil)
Псевдоним для: new
find_tzinfo(name) Показать исходный код
# File activesupport/lib/active_support/values/time_zone.rb, line 362
def self.find_tzinfo(name)
  TZInfo::TimezoneProxy.new(MAPPING[name] || name)
end
new(name, utc_offset = nil, tzinfo = nil) Показать исходный код

Создает новый объект TimeZone с заданным именем и смещением. Смещение — это количество секунд, на которое этот часовой пояс смещен от UTC (GMT). Секунды были выбраны в качестве единицы измерения смещения, потому что именно эта единица используется в Ruby для представления смещений часовых поясов (см. Time#utc_offset).

# File activesupport/lib/active_support/values/time_zone.rb, line 214
def initialize(name, utc_offset = nil, tzinfo = nil)
  @name = name
  @utc_offset = utc_offset
  @tzinfo = tzinfo || TimeZone.find_tzinfo(name)
  @current_period = nil
end
Также является псевдонимом для: create
new(name) Показать исходный код

Возвращает экземпляр TimeZone с заданным именем или nil, если такой экземпляр TimeZone не существует. (Это существует для поддержки использования этого класса с макросом composed_of)

# File activesupport/lib/active_support/values/time_zone.rb, line 372
def new(name)
  self[name]
end
seconds_to_utc_offset(seconds, colon = true) Показать исходный код

Предполагает, что self представляет смещение от UTC в секундах (как возвращается Time#utc_offset) и преобразует его в строку формата +HH:MM.

TimeZone.seconds_to_utc_offset(-21_600) # => "-06:00"
# File activesupport/lib/active_support/values/time_zone.rb, line 198
def self.seconds_to_utc_offset(seconds, colon = true)
  format = colon ? UTC_OFFSET_WITH_COLON : UTC_OFFSET_WITHOUT_COLON
  sign = (seconds < 0 ? '-' : '+')
  hours = seconds.abs / 3600
  minutes = (seconds.abs % 3600) / 60
  format % [sign, hours, minutes]
end
us_zones() Показать исходный код

Удобный метод для возвращения коллекции объектов TimeZone для часовых поясов США.

# File activesupport/lib/active_support/values/time_zone.rb, line 413
def us_zones
  @us_zones ||= all.find_all { |z| z.name =~ /US|Arizona|Indiana|Hawaii|Alaska/ }
end
zones_map() Показать исходный код
# File activesupport/lib/active_support/values/time_zone.rb, line 383
def zones_map
  @zones_map ||= begin
    MAPPING.each_key {|place| self[place]} # load all the zones
    @lazy_zones_map
  end
end

Общедоступные методы экземпляров

<=>(zone) Показать исходный код

Сравнить часовой пояс с параметром. Сначала сравниваются смещения, а затем — имена.

# File activesupport/lib/active_support/values/time_zone.rb, line 239
def <=>(zone)
  return unless zone.respond_to? :utc_offset
  result = (utc_offset <=> zone.utc_offset)
  result = (name <=> zone.name) if result == 0
  result
end
=~(re) Показать исходный код

Сравнить имя и идентификатор TZInfo с предоставленным регулярным выражением, возвращая true при совпадении.

# File activesupport/lib/active_support/values/time_zone.rb, line 248
def =~(re)
  re === name || re === MAPPING[name]
end
at(secs) Показать исходный код

Метод для создания нового экземпляра ActiveSupport::TimeWithZone в часовом поясе self по числу секунд с момента эпохи Unix.

Time.zone = 'Hawaii'        # => "Hawaii"
Time.utc(2000).to_f         # => 946684800.0
Time.zone.at(946684800.0)   # => Fri, 31 Dec 1999 14:00:00 HST -10:00
# File activesupport/lib/active_support/values/time_zone.rb, line 273
def at(secs)
  Time.at(secs).utc.in_time_zone(self)
end
formatted_offset(colon=true, alternate_utc_string = nil) Показать исходный код

Возвращает смещение часового пояса в формате строки, например, «+HH:MM».

# File activesupport/lib/active_support/values/time_zone.rb, line 233
def formatted_offset(colon=true, alternate_utc_string = nil)
  utc_offset == 0 && alternate_utc_string || self.class.seconds_to_utc_offset(utc_offset, colon)
end
local(*args) Показать исходный код

Метод для создания нового экземпляра ActiveSupport::TimeWithZone в часовом поясе self из заданных значений.

Time.zone = 'Hawaii'                    # => "Hawaii"
Time.zone.local(2007, 2, 1, 15, 30, 45) # => Thu, 01 Feb 2007 15:30:45 HST -10:00
# File activesupport/lib/active_support/values/time_zone.rb, line 262
def local(*args)
  time = Time.utc(*args)
  ActiveSupport::TimeWithZone.new(nil, self, time)
end
local_to_utc(time, dst=true) Показать исходный код

Корректирует заданное время до одновременного времени в UTC. Возвращает экземпляр Time.utc().

# File activesupport/lib/active_support/values/time_zone.rb, line 342
def local_to_utc(time, dst=true)
  tzinfo.local_to_utc(time, dst)
end
now() Показать исходный код

Возвращает экземпляр ActiveSupport::TimeWithZone, представляющий текущее время в часовом поясе, представленном в self.

Time.zone = 'Hawaii'  # => "Hawaii"
Time.zone.now         # => Wed, 23 Jan 2008 20:24:27 HST -10:00
# File activesupport/lib/active_support/values/time_zone.rb, line 314
def now
  time_now.utc.in_time_zone(self)
end
parse(str, now=now()) Показать исходный код

Метод для создания нового экземпляра ActiveSupport::TimeWithZone в часовом поясе self из обработанной строки.

Time.zone = 'Hawaii'                   # => "Hawaii"
Time.zone.parse('1999-12-31 14:00:00') # => Fri, 31 Dec 1999 14:00:00 HST -10:00

Если верхние компоненты отсутствуют в строке, они берутся из #now:

Time.zone.now               # => Fri, 31 Dec 1999 14:00:00 HST -10:00
Time.zone.parse('22:30:00') # => Fri, 31 Dec 1999 22:30:00 HST -10:00
# File activesupport/lib/active_support/values/time_zone.rb, line 288
def parse(str, now=now())
  parts = Date._parse(str, false)
  return if parts.empty?

  time = Time.new(
    parts.fetch(:year, now.year),
    parts.fetch(:mon, now.month),
    parts.fetch(:mday, now.day),
    parts.fetch(:hour, 0),
    parts.fetch(:min, 0),
    parts.fetch(:sec, 0) + parts.fetch(:sec_fraction, 0),
    parts.fetch(:offset, 0)
  )

  if parts[:offset]
    TimeWithZone.new(time.utc, self)
  else
    TimeWithZone.new(nil, self, time)
  end
end
period_for_local(time, dst=true) Показать исходный код

Доступен для того, чтобы экземпляры TimeZone отвечали как экземпляры TZInfo::Timezone.

# File activesupport/lib/active_support/values/time_zone.rb, line 354
def period_for_local(time, dst=true)
  tzinfo.period_for_local(time, dst)
end
period_for_utc(time) Показать исходный код

Доступен для того, чтобы экземпляры TimeZone отвечали как экземпляры TZInfo::Timezone.

# File activesupport/lib/active_support/values/time_zone.rb, line 348
def period_for_utc(time)
  tzinfo.period_for_utc(time)
end
to_s() Показать исходный код

Возвращает текстовое представление этого часового пояса.

# File activesupport/lib/active_support/values/time_zone.rb, line 253
def to_s
  "(GMT#{formatted_offset}) #{name}"
end
today() Показать исходный код

Возвращает текущую дату в этом часовом поясе.

# File activesupport/lib/active_support/values/time_zone.rb, line 319
def today
  tzinfo.now.to_date
end
tomorrow() Показать исходный код

Возвращает следующую дату в этом часовом поясе.

# File activesupport/lib/active_support/values/time_zone.rb, line 324
def tomorrow
  today + 1
end
utc_offset() Показать исходный код

Возвращает смещение этого часового пояса от UTC в секундах.

# File activesupport/lib/active_support/values/time_zone.rb, line 222
def utc_offset
  if @utc_offset
    @utc_offset
  else
    @current_period ||= tzinfo.try(:current_period)
    @current_period.try(:utc_offset)
  end
end
utc_to_local(time) Показать исходный код

Корректирует заданное время до одновременного времени в часовом поясе, представленном в self. Возвращает экземпляр Time.utc() – если вам нужен экземпляр ActiveSupport::TimeWithZone, используйте DateAndTime::Zones#in_time_zone вместо этого.

# File activesupport/lib/active_support/values/time_zone.rb, line 336
def utc_to_local(time)
  tzinfo.utc_to_local(time)
end
yesterday() Показать исходный код

Возвращает предыдущую дату в этом часовом поясе.

# File activesupport/lib/active_support/values/time_zone.rb, line 329
def yesterday
  today - 1
end

© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API