English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby базовый учебник

Ruby продвинутый учебник

Ruby Date & Time (Date & 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 Объект используется для получения различных компонентов даты и времени. См. следующий пример:

Онлайн пример

#!/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.utcTime.gm и Time.local Функция

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

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

Ниже приведены способы получения времени, секунд с эры (platform-dependent):

# Возврат секунд с эры
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 относителен к UTC с 0 секундной смещением
time.zone       # => "PST"(или другой часовой пояс)
time.isdst      # => false:Если UTC не имеет DST(летнее время)
time.utc?       # => true:Если в UTC-часовом поясе
time.localtime  # Преобразование в местное времяzones
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День недели в году (Sunday - 0, 0 до 6).
%xПредпочтительный способ представления даты без времени.
%XПредпочтительный способ представления времени без даты.
%yГод без centuries (00 до 99).
%YГод с centuries.
%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 => количество секунд
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