Ruby Дата и время

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

Этот учебник познакомит вас со всеми важными концепциями даты и времени.

Создание текущей даты и времени

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

Пример

#!/usr/bin/ruby -w # -*- coding: UTF-8 -*- time1 = Time.new puts "Текущее время :" + time1.inspect #Time.now эквивалентно time2 = Time.now puts "Текущее время :" + time2.inspect

Попробуйте »

Вывод приведенного выше примера:

当前时间 : 2015-09-17 15:23:14 +0800
当前时间 : 2015-09-17 15:23:14 +0800

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

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

Пример

#!/usr/bin/ruby -w # -*- coding: UTF-8 -*- time = Time.new #Компоненты Time puts "Текущее время :" + time.inspect puts time.year #=> Год даты puts time.month #=> Месяц даты (от 1 до 12) puts time.day #=> День месяца (от 1 до 31) puts time.wday #=> День недели (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": Название часового пояса

Вывод приведенного выше примера:

当前时间 : 2015-09-17 15:24:44 +0800
2015
9
17
4
260
15
24
44
921519
CST

Time.utc、Time.gmиTime.localФункции

Эти функции можно использовать для форматирования дат в стандартных форматах, как показано ниже:

# 8 июля 2008 Time.local(2008, 7, 8) #8 июля 2008, 09:10am, местное время 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)

Следующий пример возвращает все компоненты в виде массива:

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

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

Пример

#!/usr/bin/ruby -w time = Time.new values = time.to_a p values

Вывод приведенного выше примера:

[39, 25, 15, 17, 9, 2015, 4, 260, false, "CST"]

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

Пример

#!/usr/bin/ruby -w time = Time.new values = time.to_a puts Time.utc(*values)

Вывод приведенного выше примера:

2015-09-17 15:26:09 UTC

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

#Возвращает количество секунд с начала эпохи time = Time.now.to_i #Преобразует секунды в объект Time Time.at(time) #Возвращает количество секунд с начала эпохи, включая микросекунды time = Time.now.to_f

Часовые пояса и переход на летнее время

Вы можете использовать TimeTimeобъекты, чтобы получить всю информацию, связанную с часовыми поясами и переходом на летнее время, как показано ниже:

time = Time.new #Вот объяснение: time.zone #=> "UTC": Возвращает часовой пояс time.utc_offset #=> 0: UTC имеет смещение 0 секунд относительно UTC time.zone #=> "PST" (или другой часовой пояс) time.isdst #=> false: если в UTC нет перехода на летнее время (DST) time.utc? #=> true: если в часовом поясе UTC time.localtime #Преобразовать в местный часовой пояс time.gmtime #Преобразовать обратно в UTC time.getlocal #Возвращает новый объект Time в местной зоне time.getutc #Возвращает новый объект Time в 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")

Вывод приведенного выше примера:

2015-09-17 15:26:42 +0800
Thu Sep 17 15:26:42 2015
2015-09-17 15:26:42 +0800
2015-09-17 15:26:42

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

Директивы, перечисленные в таблице ниже, используются с методомTime.strftime.

ДирективаОписание
%aСокращённое название дня недели (например, Sun).
%AПолное название дня недели (например, Sunday).
%bСокращённое название месяца (например, Jan).
%BПолное название месяца (например, January).
%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Название часового пояса.
%%Символ %.

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

С временем можно выполнять простые арифметические операции, как показано ниже:

now = Time.now #Текущее время puts now past = now - 10 #10 секунд назад. Time - number => Time puts past future = now + 10 #через 10 секунд. Time + number => Time puts future diff = future - now #=> 10 Time - Time => seconds puts diff

Вывод приведенного выше примера:

2015-09-17 15:27:08 +0800
2015-09-17 15:26:58 +0800
2015-09-17 15:27:18 +0800
10.0
Другие расширения