Класс 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
Эти две функции могут использоваться для форматирования даты в стандартном формате следующим образом:
# 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