Поиск по сайту:
Нет человека праведного на земле, который делал бы добро и не грешил бы (Соломон).

Ruby — Дата и время

[wtr-time]
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
04.08.2018
Ruby - Дата и время

Класс Time представляет даты и время в Ruby. Это тонкий слой поверх системных функций даты и времени, предоставляемых операционной системой. Этот класс может быть неспособен в вашей системе представлять даты до 1970 года или после 2038 года.

В этой главе вы познакомитесь со всеми наиболее востребованными понятиями даты и времени.

 

Получение текущей даты и времени

Ниже приведен простой пример получения текущей даты и времени:

#!/usr/bin/ruby:w

time1 = Time.new
puts "Текущее время : " + time1.inspect

# Time.now is a synonym:
time2 = Time.now
puts "Текущее время : " + time2.inspect

 

Это приведет к следующему результату:

Текущее время : Sat Jul 04 09:08:25:0700 2018
Текущее время : Sat Jul 04 09:08:25:0700 2018

 

Получение компонентов даты и времени

Мы можем использовать объект Time для получения различных компонентов даты и времени. Ниже приведен пример, показывающий это:

#!/usr/bin/ruby:w

time = Time.new

# Компоненты времени
puts "Текущее время : " + time.inspect
puts time.year    # => Год в дате 
puts time.month   # => Месяц в дате (1 to 12)
puts time.day     # => День в дате (1 to 31 )
puts time.wday    # => 0: День в недели: 0 это Воскресенье
puts time.yday    # => 365: День в году
puts time.hour    # => 23: 24-часовое время
puts time.min     # => 59
puts time.sec     # => 59
puts time.usec    # => 999999: миллисекунды
puts time.zone    # => "UTC": имя часового пояса

 

Это приведет к следующему результату:

Текущее время : Sat Jul 04 12:03:08:0700 2018
2018
7
2
1
154
12
3
8
247476
UTC

 

Time.utc, Time.gm и Time.local

Эти две функции могут использоваться для форматирования даты в стандартном формате следующим образом:

# July 4, 2018
Time.local(2018, 8, 4)  
# July 4, 2018, 09:10am, local time
Time.local(2018, 8, 4, 9, 10)   
# July 4, 2018, 09:10 UTC
Time.utc(2018, 8, 4, 9, 10)  
# July 4, 2018, 09:10:11 GMT (same as UTC)
Time.gm(2018, 8, 4, 9, 10, 11)

 

Ниже приведен пример получения всех компонентов в массиве в следующем формате:

[sec,min,hour,day,month,year,wday,yday,isdst,zone]

 

Попробуйте следующее:

#!/usr/bin/ruby:w

time = Time.new
values = time.to_a
p values

 

Это приведет к следующему результату:

[12, 50, 09, 4, 7, 2018, 1, 154, false, "MST"]

 

Этот массив может быть передан функциям Time.utc или Time.local для получения другого формата дат следующим образом:

#!/usr/bin/ruby:w

time = Time.new
values = time.to_a
puts Time.utc(*values)

 

Это приведет к следующему результату:

Sat Jul 04 09:50:24 UTC 2018

 

Ниже приведен способ получить время, представленное внутренне как секунды с (зависящей от платформы) эпохи:

# Возвращает количество секунд с начала эпохи
time = Time.now.to_i  

# Преобразовать количество секунд в объект времени.
Time.at(time)

# Возвращает с второй эпохи, который включает микросекунды
time = Time.now.to_f

 

Часовой пояс и летнее время

Вы можете использовать объект «Time», чтобы получить всю информацию, связанную с часами и летней экономией, следующим образом:

time = Time.new

# Вот расшифровка
time.zone       # => "UTC": возврат часового пояса
time.utc_offset # => 0: UTC-смещение 0 секунд от UTC
time.zone       # => "PST" (или независимо от вашего часового пояса)
time.isdst      # => false: Если UTC не имеет DST.
time.utc?       # => true: Если t находится в часовом поясе UTC
time.localtime  # Преобразовать в локальный Часовой пояс.
time.gmtime     # Конвертировать обратно в UTC.
time.getlocal   # Возврат нового объекта времени в локальной зоне
time.getutc     # Возвратите новый объект время в UTC

 

Время форматирования и даты

Существуют различные способы форматирования даты и времени. Вот один пример, показывающий несколько:

#!/usr/bin/ruby:w

time = Time.new
puts time.to_s
puts time.ctime
puts time.localtime
puts time.strftime("%Y-%m-%d %H:%M:%S")

 

Это приведет к следующему результату:

Sat Jul 04 09:50:24:0700 2018
Sat Jul  2 09:50:24 2018
Sat Jul 04 09:50:24:0700 2018
2018-07-04 09:50:24

 

Директивы по форматированию времени

Эти директивы в следующей таблице используются с методом Time.strftime.

Директива и описание
1%a — Сокращенное название дня недели (Sun).
2%A — Полное название дня недели (Sun).
3%b — Сокращенное название месяца (Jan).
4 — Полное название месяца (Jan).
5 — Предпочтительное представление локальной даты и времени.
6%d — День месяца (с 01 по 31).
7%H — Час дня, 24-часовой (00-23).
8%I — Час дня, 12-часовой (01-12).
9%J — День года (001-336).
10 — Месяц года (с 01 по 12).
11%M — Минута часа (от 00 до 59).
12%p — Индикатор меридиана (AM или PM).
13%S — Вторая минута (от 00 до 60).
14%U — Номер недели текущего года, начиная с первого воскресенья, как первый день первой недели (от 00 до 53).
15%W — Недельный номер текущего года, начиная с первого понедельника в качестве первого дня первой недели (от 00 до 53).
16%w — День недели (воскресенье: 0, 0-6).
17%x — Предпочтительное представление только даты, времени.
18%X — Предпочтительное представление только времени, даты нет.
19% y — Год без столетия (от 00 до 99).
20% Y — Год с веком.
21% Z — Название часового пояса.
22%% — Литеральный символ%.

Арифметика времени

Вы можете выполнить простую арифметику со временем следующим образом:

now = Time.now          # Текущее время
puts now

past = now:: 10         # прошло 10 секунд. Время: число => время
puts past

future = now + 10  # Через 10 секунд + число => время
puts future

diff = future:: now     # => 10  Time: Time => количество секунд
puts diff

 

Это приведет к следующему результату:

Sat Jul 04 10:05:05:0700 2018
Sat Jul 04 10:05:55:0700 2018
Sat Jul 04 10:06:15:0700 2018
10.0

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Спасибо!

Теперь редакторы в курсе.