Ruby Date & Time
Класс Time представляет дату и время в Ruby. Это тонкий слой над системной функцией даты и времени, предоставляемой операционной системой. Этот класс может не иметь возможности в вашей системе представлять даты до 1970 года или после 2038 года (UNIX-time).
Getting Current Date & Time (Получение текущей даты и времени):
Ниже приведен простой пример получения текущей даты и времени:
#!/usr/bin/ruby -w
time1 = Time.new
puts "Текущее время:" + time1.inspect
# Time.now является синонимом:
time2 = Time.now
puts "Текущее время:" + time2.inspect
Это даст следующий результат:
Текущее время:2020-09-11 11:43:59 +0300
Текущее время:2020-09-11 11:43:59 +0300
Getting components of a Date & Time (Получение компонентов даты и времени):
Мы можем использовать объект Time для получения различных компонентов даты и времени. Ниже приведен пример, показывающий то же самое:
#!/usr/bin/ruby -w
time = Time.new
# Компоненты времени
puts "Текущее время:" + time.inspect
puts time.year # => Год
puts time.month # => Месяц (от 1 до 12)
puts time.day # => Число месяца (от 1 до 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" : название часового пояса
Это даст следующий результат:
Текущее время:2020-09-11 11:53:11 +0300
2020
9
11
5
255
11
53
11
122000
Moscow Standard Time
Функции Time.utc, Time.gm и Time.local:
Эти две функции можно использовать для форматирования даты в стандартном формате следующим образом:
# 8 июля 2008 г. Time.local (2008, 7, 8)
# 8 июля 2008 г., 09:10 по местному времени
Time.local (2008, 7, 8, 9, 10)
# 8 июля 2008 г., 09:10 UTC
Time.utc (2008, 7, 8, 9, 10)
# 8 июля 2008 г., 09:10:11 GMT (то же, что и UTC)
Time.gm (2008, 7, 8, 9, 10, 11)
Ниже приведен пример получения всех компонентов в массиве в следующем формате:
[сек, мин, час, день, месяц, год, wday, yday, isdst, зона]
Попробуйте следующее:
#!/usr/bin/ruby -w
time = Time.new
values = time.to_a
p values
Это даст следующий результат:
[56, 3, 12, 11, 9, 2020, 5, 255, false, "Moscow Standard Time"]
Этот массив можно передать функциям Time.utc или Time.local, чтобы получить следующий формат дат:
#!/usr/bin/ruby -w
time = Time.new
values = time.to_a
puts Time.utc(*values)
Это даст следующий результат:
2020-09-11 12:07:38 UTC
Followin - это способ получить внутреннее представление времени в секундах с (платформо-зависимой) эпохи:
# Возвращает количество секунд с начала эпохи
time = Time.now.to_i
# Преобразует количество секунд в объект Time.
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 нет летнего времени.
time.utc? # => true: если t находится в часовом поясе UTC
time.localtime # Преобразовать в местный часовой пояс.
time.gmtime # Вернемся к UTC.
time.getlocal # Вернуть новый объект Time в локальной зоне
time.getutc # Вернуть новый объект Time в UTC
Formatting Time & Date:
Есть разные способы форматирования даты и времени. Вот один пример, показывающий несколько:
#!/usr/bin/ruby -w
time = Time.new
puts time.to_s
puts time.ctime
puts time.localtime
puts time.strftime ( "%Y-% m-% d %:qH:% M:% S" )
Это даст следующий результат:
2020-09-11 13:18:35 +0300
Fri Sep 11 13:18:35 2020
2020-09-11 13:18:35 +0300
2020-09-11 13:18:35
Директивы форматирования времени:
Эти директивы в следующей таблице используются с методом Time.strftime.
Директива Описание
%a Сокращенное название дня недели (Sun).%A Полное название дня недели (воскресенье).%b Сокращенное название месяца (Jan).%B Полное название месяца (Январь).%c Предпочтительное местное представление даты и времени.%d День месяца (от 01 до 31).H% Час дня, 24-часовой формат (от 00 до 23).%I Час дня, 12-часовой формат (от 01 до 12).%j День года (от 001 до 366). %m Месяц года (с 01 по 12).%M Минуты часа (от 00 до 59).%p Меридианный индикатор (AM или PM).%S Секунда минуты (от 00 до 60).%U Номер недели текущего года, начиная с первого воскресенья как первого дня первой недели (с 00 по 53).%W Номер недели текущего года, начиная с первого понедельника как первого дня первой недели (с 00 по 53).%w День недели неделя (воскресенье - от 0, от 0 до 6).%x Предпочтительное представление только для даты, без времени.%X Рекомендуемое представление только для времени, без даты.%y Год без века (от 00 до 99).%Y Год с веком.%Z Имя Time зоны. %% Cимвол %.Арифметика времени:
Вы можете выполнять простую арифметику со временем следующим образом:
now = Time.now # Текущее время
past = now - 10 # 10 секунд назад. Время - число => Время
future = now + 10 # Через 10 секунд. Время + число => Время
future = now # => 10 Time - Time => number of seconds