Рубин — Дата и время

Поділитись


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

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

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

 Live Demo

#!/usr/bin/ruby -w

time1 = Time.new
puts "Current Time : " + time1.inspect

# Time.now is a synonym:
time2 = Time.now
puts "Current Time : " + time2.inspect
Это даст следующий результат —

Current Time : Mon Jun 02 12:02:39 -0700 2008
Current Time : Mon Jun 02 12:02:39 -0700 2008
Получение компонентов даты и времени
Мы можем использовать объект Time для получения различных компонентов даты и времени. Ниже приведен пример, показывающий то же самое —

 Live Demo

#!/usr/bin/ruby -w

time = Time.new

# Components of a Time
puts "Current Time : " + time.inspect
puts time.year    # => Year of the date 
puts time.month   # => Month of the date (1 to 12)
puts time.day     # => Day of the date (1 to 31 )
puts time.wday    # => 0: Day of week: 0 is Sunday
puts time.yday    # => 365: Day of year
puts time.hour    # => 23: 24-hour clock
puts time.min     # => 59
puts time.sec     # => 59
puts time.usec    # => 999999: microseconds
puts time.zone    # => "UTC": timezone name
Это даст следующий результат —

Current Time : Mon Jun 02 12:03:08 -0700 2008
2008
6
2
1
154
12
3
8
247476
UTC
Функции Time.utc, Time.gm и Time.local
Эти две функции можно использовать для форматирования даты в стандартном формате следующим образом:

# July 8, 2008
Time.local(2008, 7, 8)  
# July 8, 2008, 09:10am, local time
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 (same as UTC)
Time.gm(2008, 7, 8, 9, 10, 11)  
Ниже приведен пример получения всех компонентов в массиве в следующем формате:

[sec,min,hour,day,month,year,wday,yday,isdst,zone]
Попробуйте следующее —

 Live Demo

#!/usr/bin/ruby -w

time = Time.new
values = time.to_a
p values
Это сгенерирует следующий результат —

[26, 10, 12, 2, 6, 2008, 1, 154, false, "MST"]
Этот массив можно передать в функции Time.utc или Time.local, чтобы получить другой формат дат следующим образом:

 Live Demo

#!/usr/bin/ruby -w

time = Time.new
values = time.to_a
puts Time.utc(*values)
Это сгенерирует следующий результат —

Mon Jun 02 12:15:36 UTC 2008
Ниже приведен способ получения времени, представленного внутренне в секундах с (зависимой от платформы) эпохи —

# Returns number of seconds since epoch
time = Time.now.to_i  

# Convert number of seconds into Time object.
Time.at(time)

# Returns second since epoch which includes microseconds
time = Time.now.to_f
Часовые пояса и летнее время
Вы можете использовать объект Time для получения всей информации, связанной с часовыми поясами и переходом на летнее время, следующим образом:

time = Time.new

# Here is the interpretation
time.zone       # => "UTC": return the timezone
time.utc_offset # => 0: UTC is 0 seconds offset from UTC
time.zone       # => "PST" (or whatever your timezone is)
time.isdst      # => false: If UTC does not have DST.
time.utc?       # => true: if t is in UTC time zone
time.localtime  # Convert to local timezone.
time.gmtime     # Convert back to UTC.
time.getlocal   # Return a new Time object in local zone
time.getutc     # Return a new Time object in UTC
Форматирование времени и даты
Существуют различные способы форматирования даты и времени. Вот один пример, показывающий несколько —

 Live Demo

#!/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")
Это даст следующий результат —

Mon Jun 02 12:35:19 -0700 2008
Mon Jun  2 12:35:19 2008
Mon Jun 02 12:35:19 -0700 2008
2008-06-02 12:35:19
Директивы форматирования времени
Эти директивы в следующей таблице используются с методом Time.strftime .

Sr.No.	Директива и описание
1	
% в

Сокращенное название дня недели (Солнце).

2	
% A

Полное название дня недели (воскресенье).

3	
% б

Сокращенное название месяца (январь).

4	
% В

Полное название месяца (январь).

5	
% с

Предпочтительное местное представление даты и времени.

6	
% d

День месяца (с 01 по 31).

7	
%ЧАС

Час дня, круглосуточные часы (с 00 до 23).

8	
%Я

Час дня, 12-часовые часы (с 01 до 12).

9	
% J

День года (от 001 до 366).

10	
% м

Месяц года (от 01 до 12).

11	
% M

Минута часа (от 00 до 59).

12	
%п

Индикатор меридиана (AM или PM).


13	
% S

Секунды минуты (от 00 до 60).

14	
% U

Номер недели текущего года, начиная с первого воскресенья как первого дня первой недели (от 00 до 53).

15	
% W

Номер недели текущего года, начиная с первого понедельника в качестве первого дня первой недели (от 00 до 53).

16	
% мас

День недели (воскресенье 0, 0 до 6).

17	
%Икс

Предпочитаемое представление только для даты, без времени.

18	
%ИКС

Предпочитаемое представление только для времени, без даты.

19	
% г

Год без века (от 00 до 99).

20	
% Y

Год с веком.

21	
% Z

Название часового пояса.

22	
%%

Буквальный символ%.

% в

Сокращенное название дня недели (Солнце).

% A

Полное название дня недели (воскресенье).

% б

Сокращенное название месяца (январь).

% В

Полное название месяца (январь).

% с

Предпочтительное местное представление даты и времени.

% d

День месяца (с 01 по 31).

%ЧАС

Час дня, круглосуточные часы (с 00 до 23).

%Я

Час дня, 12-часовые часы (с 01 до 12).

% J

День года (от 001 до 366).

% м

Месяц года (от 01 до 12).

% M

Минута часа (от 00 до 59).

%п

Индикатор меридиана (AM или PM).

% S

Секунды минуты (от 00 до 60).

% U

Номер недели текущего года, начиная с первого воскресенья как первого дня первой недели (от 00 до 53).

% W

Номер недели текущего года, начиная с первого понедельника в качестве первого дня первой недели (от 00 до 53).

% мас

День недели (воскресенье 0, 0 до 6).

%Икс

Предпочитаемое представление только для даты, без времени.

%ИКС

Предпочитаемое представление только для времени, без даты.

% г

Год без века (от 00 до 99).

% Y

Год с веком.

% Z

Название часового пояса.

%%

Буквальный символ%.

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

 Live Demo

now = Time.now          # Current time
puts now

past = now - 10         # 10 seconds ago. Time - number => Time
puts past

future = now + 10  # 10 seconds from now Time + number => Time
puts future

diff = future - past     # => 10  Time - Time => number of seconds
puts diff

Поділитись