Все нужно проектировать сверху вниз, за исключением фундамента, с которого нужно начинать. (Алан.Дж.Перлис)

Ruby – Дата и время

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
4 августа 2018
Ruby - Дата и время
Класс 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

Time.utc, Time.gm и Time.local

Эти две функции могут использоваться для форматирования даты в стандартном формате следующим образом:

# 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 – Сокращенное название месяца (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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Просмотров: 2

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

    Добавить комментарий

    Войти с помощью: 

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам:

    Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

    badge
    Обратный звонок 1
    Отправить
    galka

    Спасибо! Ваша заявка принята

    close
    galka

    Спасибо! Ваша заявка принята

    close