Даты
В данной статье представлены правила написания и чтения английских дат, а также названия дней недели, месяцев и сезонов.
Даты – одна из первых тем в изучении английского языка, хотя и не самая простая. На самом деле, это разумно, поскольку в самом начале пути учащиеся должны освоить основные разговорные темы и уметь говорить сколько им лет, какой сейчас день недели, месяц, год, какое сегодня число, а самое главное, они должны уметь назвать дату своего рождения по-английски. Прежде всего стоит начать изучение дат английского языка с дней недели.
Дни недели
В английском языке дни недели выглядят следующим образом:
Monday – понедельник
Tuesday – вторник
Wednesday – среда
Thursday – четверг
Friday – пятница
Saturday – суббота
Sunday – воскресенье
Стоит обратить внимание на то, что все дни недели в английском языке всегда пишутся с заглавной буквы и употребляются с предлогом «on»: on Monday – в понедельник, on Tuesday – во вторник, on Wednesday – в среду, on Thursday – в четверг, on Friday – в пятницу, on Saturday – в субботу, on Sunday – в воскресенье.
Every week has 7 days, В каждой неделе 7 дней,
See how many you can say:
Sunday, Monday, Tuesday,
Wednesday, Thursday, Friday,
Saturday. What’s today?
Посмотрим, сколько ты назовешь:
Воскресенье, понедельник, вторник,
Среда, четверг, пятница,
Суббота. А сегодня какой день?
Стоит обратить внимание, что во многих странах, включая Россию, неделя начинается с понедельника, а в Соединенных штатах и в Канаде первым днем является воскресенье, хотя этот день также считается выходным.
Будние дни в английском языке называются weekday – weekdays и употребляются с предлогом «on»:
On weekdays, I am very busy and have no free time to go to the gym. – По будням я очень занята и у меня нет свободного времени, чтобы сходить в тренажерный зал.
Выходные дни, а именно суббота и воскресенье, в английском языке называются одним словом weekend, которое в британском варианте употребляется с предлогом «at»: at the weekend. В американском английском же можно сказать on the weekend:
What are you doing at/on the weekend? – Чем ты будешь заниматься в выходные?
Мы используем определенный артикль «the» в выражении at/on the weekend, когда говорим о ближайших выходных. Артикль «the» можно опустить, когда речь идет о выходных в целом, например:
On weekends we go to the country. – По выходным мы ездим в деревню.
Месяцы
Месяцы являются основной составляющей английских дат. В английском языке четыре времени года называются так:
spring – весна
summer – лето
autumn – осень
winter – зима
Spring is green. Весна зеленая,
Summer is bright,
Autumn is yellow,
Winter is white.
Лето яркое,
Осень желтая,
Зима белая.
Все английские названия месяцев, так же, как и дни недели пишутся с заглавной буквы, и употребляются, как правило, с предлогом «in»:
(in) January (Jan) – январь
(in) February (Feb) – февраль
(in) March (Mar) – март
(in) April (Apr) – апрель
(in) May (May) – май
(in) June (Jun) – июнь
(in) July (Jul) – июль
(in) August (Aug) – август
(in) September (Sep) – сентябрь
(in) October (Oct) – октябрь
(in) November (Nov) – ноябрь
(in) December (Dec) – декабрь
January, February, March – that’s not so much! Январь, февраль, март – это не так уж и много!
April, May, June – that’s the tune!
July, August and September – we are cheerful and slender!
October, November, December- all these months you must remember!
Апрель, Май, Июнь – вот это мотив!
Июль, август и сентябрь – мы веселые и стройные!
Октябрь, ноябрь, декабрь — все эти месяцы вы должны запомнить!
Когда в предложении появляется порядковое числительное перед месяцем для обозначения какой-либо даты, необходимо использовать предлог «on». Ниже представлены порядковые числительные, которые употребляются для написания даты в английском языке. Следует обратить внимание, что у порядковых числительных должен присутствовать артикль «the» и суффикс «-th»
1st – the first – первое
2nd – the second — второе
4th – the fourth — четвертое
5th – the fifth — пятое
6th – the sixth — шестое
7th – the seventh – седьмое
8th – the eighth — восьмое
9th – the ninth — девятое
10th – the tenth — десятое
11th – the eleventh — одиннадцатое
12th – the twelfth — двенадцатое
13th – the thirteenth — тринадцатое
14th – the fourteenth — четырнадцатое
15th – the fifteenth — пятнадцатое
16th – the sixteenth — шестнадцатое
17th – the seventeenth – семнадцатое
18th – the eighteenth — восемнадцатое
19th — the nineteenth — девятнадцатое
20th – the twentieth — двадцатое
21st – the twenty-first – двадцать первое
30th – the thirtieth – тридцатое
Самый распространенный вопрос, который возникает у учащихся при изучении дат, это «Как правильно пишутся даты на английском?».
Ниже приведены примеры написания дат в британском варианте:
В американском английском месяц принято ставить перед числом: March 12, 03/12, а читаться это будет следующим образом: March twelve или March twelfth.
Годы
Помимо дат, включающих в себя число и месяц, часто указываются и годы. Прежде всего стоит обратить внимание, что они употребляются с предлогом in (в) и без артикля. На письме все просто: годы, как правило, выражены цифрами, а вот чтение английских дат в данном случае иногда вызывает затруднение. Ниже представлена таблица чтения дат на английском:
Приведем примеры употребления дат с указанием года, а также числа и месяца:
When were you born? – I was born in 1992 (nineteen ninety-two). – В каком году ты родилась? – В 1992.
Mary graduated from University in 2009 (twenty oh nine/ two thousand and nine). – Мэри окончила университет в 2009 году.
When was the World War II over? – In 1945 (nineteen forty five). – Когда закончилась Вторая мировая война? – В 1945.
Susan bought her car in 2013 (twenty thirteen). – Сьюзен купила машину в 2013 году.
We celebrate Christmas on 25 December (on the twenty-fifth of December). – Мы празднуем Рождество 25 декабря.
What is the date today? – Today is September the third. – Сегодня третье сентября.
Полные даты, когда у нас есть и число, и месяц, и год, мы читаем следующим образом:
31th December 2015 – the thirty-first of December, twenty fifteen.
16th January 2010 was the coldest day of that winter. – 16 января 2010 года был самым холодным днем той зимы.
Десятилетия
Десятилетия (Decades) в английском языке могут быть выражены следующим образом:
· the 1980s – the nineteen eighties или просто the eighties – восьмидесятые
· the 1930s – the nineteen thirties – тридцатые
· in the mid-sixties – в середине шестидесятых.
Века
Века (Centuries) могут иметь следующие обозначения:
· B.C. (Before Christ) – до нашей эры / до рождения Христа
· A.D. (Anno Domini) – нашей эры / после рождения Христа
Следует обратить внимание, что B.C. стоит только после самого числа, а A.D. может стоять и до, и после даты:
This event took place in 658 B.C. – Это событие произошло в 658 до нашей эры.
· the 10th century – X век
· the 20th century – XX век
The 20th century is full of important events. – ХХ век полон важными событиями.
Даты, время и календари в Python: 3 основных модуля
Изменение цен на нефть со временем, изменение температуры за день, уровень цен за месяц, доходы за год — все эти компоненты объединяет время. В Data Science часто приходится сталкиваться с временными рядами. Сегодня мы расскажем о стандартных модулях Python, которые предоставляют интерфейс для дат и времени: time, datetime, calendar.
3 основных модуля
В комплекте стандартных библиотек Python имеются три основных модуля для работы со временем, датами и календарем:
time
предоставляет различные функции для управления значениями времени;datetime
поможет для работы с датами;calendar
обеспечит идеализированным григорианским календарем.
Далее мы рассмотрим, как их можно использовать в реальных проектах Data Science и повседневных задачах Python-программиста.
Модуль time для отсчета времени
Время в Python отсчитывается в секундах от начала эпохи. Эпоха может отличаться для разных операционных систем. Для Unix-систем эпоха — это январь 1970 года 00:00:00. Чтобы узнать, какая эпоха на компьютере, используется функция time.gmtime(0)
:
>>> import time >>> time. gmtime(0) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
Возвращается объект time_struct
, который имеет атрибуты в виде года, месяца, недели и т.д. Последний атрибут tm_isdst показывает летнее ли время (0 — нет, 1- да).
Считаем время в Python
Чтобы узнать, сколько прошло секунд с эпохи до настоящего времени, в Python используется функция time
:
>>> time.time() 1598423943.4023273
Можно получить объект time_struct
с нынешним временем в вашем часовом поясе, для этого есть localtime
:
>>> time.localtime() time.struct_time(tm_year=2020, tm_mon=8, tm_mday=26, tm_hour=13, tm_min=39, tm_sec=43, tm_wday=2, tm_yday=239, tm_isdst=0)
Получить полный форматированный вариант в читаемом виде поможет функция time. asctime()
:
>>> time.asctime() 'Wed Aug 26 13:51:33 2020'
Более удобный формат времени
Функция asctime
возвращает полную информацию о времени в определенном формате. Когда требуется самостоятельно задать формат вывода, в Python можно воспользоваться функцией strftime
, которая принимает формат вывода и объект time_struct
:
>>> time.strftime("%a %d %Y", time.localtime()) 'Wed 26 2020'
Здесь %a означает день недели, %d — день месяца, а %Y — год. Полный список доступен в официальной документации.
Из строки в time_stuct
А вот получить из строки (str) соответствующий объект time_struct
можно с помощью функции strptime:
>>> time.strptime("Wed 26 2020", "%a %d %Y") time.struct_time(tm_year=2020, tm_mon=1, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=26, tm_isdst=-1)
Не стоит путать с strftime
, так как они различаются на одну букву.
Засыпаем на некоторое время
Иногда требуется сымитировать действие, которое занимает определенное время. На помощь придет функция sleep, которая аргументом принимает секунды:
>>> def timeit(secs): ... start = time.time() ... time.sleep(secs) # заснуть на secs ... end = time.time( ... return end - start ... >>> timeit(1) 1.0011100769042969
Работаем с датами
Интерфейс для дат в Python можно найти в модуле datetime
. У него есть 3 основных класса: date
, time
и datetime
— для работы с только датами, только временем и с датой и временем, соответственно. Объект date принимает в качестве аргументов год, месяц и день:
>>> from datetime import date, time, datetime >>> date(year=2020, month=1, day=15) datetime.date(2020, 1, 15)
Объект time
принимает часы, минуты и секунды:
>>> time(hour=18, minute=45, second=30) datetime. time(18, 45, 30)
Объект datetime
принимает все вышеперечисленное:
>>> datetime(year=2020, month=1, day=15, hour=18, minute=45, second=30) datetime.datetime(2020, 1, 15, 18, 45, 30)
Сейчас и сегодня
В Python можно получить сегодняшнюю дату:
>>> date.today() datetime.date(2020, 8, 26)
А также, текущую дату и время:
>>> datetime.today() datetime.datetime(2020, 8, 26, 15, 52, 39, 757438)
Получаем даты из ISO-формата
Помимо прочего, можно получить дату из ISO формат с видом YYYY-MM-DD:
>>> date.fromisoformat("2020-01-15") datetime.date(2020, 1, 15)
В Python 8 был добавлен метод fromisocalendar
, который принимает в качестве аргументов год, неделю, месяц:
>>> date. fromisocalendar(2020, 45, 3) datetime.date(2020, 11, 4)
Формат даты из строки
Как и время из модуля time, объект datetime
имеет методы strptime
и strftime
для получение строки из даты и наоборот:
>>> datetime.strptime("Wed 26 2020", "%a %d %Y") datetime.datetime(2020, 1, 26, 0, 0) >>> today = datetime.today() >>> today.strftime("%a %d %Y") 'Wed 26 2020'
Из секунд в даты
Как уже было сказано, time.time
возвращает количество секунд, которые начинаются с эпохи. Эти секунды также можно перевести в дату и время:
>>> now = time.time() >>> datetime.fromtimestamp(now) datetime.datetime(2020, 8, 26, 13, 39, 3, 402327)
Сколько времени прошло
В Python-модуле datetime
имеется специальный объект timedelta
, который используется для разницы между датами
>>> from datetime import timedelta >>> timedelta(days=10, seconds=25) datetime. timedelta(days=10, seconds=25)
Например, можно получить разницу между сегодняшним и вчерашним днями:
>>> today = datetime.today() >>> yesterday = date(2020, 8, 25) >>> today - yesterday datetime.timedelta(days=1)
Для более точного подсчета можно добавить часы, минуты, секунды.
Работаем с календарем
В Python также можно работать с календарем, который есть в модуле calendar
. Объект Calendar позволяет итерировать дни и недели в месяце, в году и т.д. Например, метод monthdatescalendar
вернет список дней (объекты datetime
) заданного месяца и года, причем дополнит их так, чтобы начинался с первого дня понедельника прошлого месяца и заканчивался последним воскресенья следующего (для августа 2020 — это 27 июля и 6 сентября):
>>> from calendar import Calendar >>> c = Calendar() >>> c. monthdatescalendar(2020, 8) [datetime.date(2020, 7, 27), datetime.date(2020, 7, 28), ... datetime.date(2020, 8, 1), datetime.date(2020, 8, 2), ... datetime.date(2020, 8, 31), ... datetime.date(2020, 9, 6)]
А вот метод yeardatescalendar
вернет список дней заданного года. И в этом случае он будет каждый месяц дополнять днями первого понедельника и последнего воскресенья, поэтому если требуется посчитать количество дней в году лучше использовать функцию max
для месяца, а не len
.
В Python 3.7 были добавлены методы, которые возвращают не список, а генератор (о них мы писали тут). Поэтому вместо monthdatescalendar
можно использовать itermonthdays
.
Печатаем календарь на месяц
В Python можно получить календарь в читаемом формате с помощью prmonth:
>>> import calendar >>> calendar.prmonth(2020, 8) August 2020 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Печатаем календарь на год
А вот функция prcal
напечатает весь календарь заданного года:
>>> calendar. prcal(2020) January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 1 2 1 6 7 8 9 10 11 12 3 4 5 6 7 8 9 2 3 4 5 6 7 8 13 14 15 16 17 18 19 10 11 12 13 14 15 16 9 10 11 12 13 14 15 20 21 22 23 24 25 26 17 18 19 20 21 22 23 16 17 18 19 20 21 22 27 28 29 30 31 24 25 26 27 28 29 23 24 25 26 27 28 29 30 31 ...остальные месяцы
Дни недели
Что не перечислять дни недели самостоятельно (Monday, Tuesday и т.д), можно использовать готовые перечисления. Также с функцией weekday можно узнать день недели заданного дня:
>>> calendar.WEDNESDAY 2 >>> calendar.weekday(2020, 8, 26) 2
Еще больше подробностей вы сможете о работе со временем, датами и временными рядами в целом, вы узнаете на наших Python-курсах в лицензированном учебном центре обучения и повышения квалификации IT-специалистов в Москве.
Смотреть расписание
Записаться на курс
Программирование на Lua: 22.1
Программирование на Lua: 22.1 Это первое издание было написано для Lua 5.0. Несмотря на то, что они по-прежнему актуальны для более поздних версий, есть некоторые отличия.
Четвертое издание ориентировано на Lua 5.3 и доступно на Amazon и в других книжных магазинах.
Покупая книгу, вы также помогаете проекту Lua.
Программирование на Луа | ||
Часть III. Стандартные библиотеки Глава 22. Библиотека операционной системы |
две функции, время
и дата
,
делать все запросы даты и времени в Lua.
Функция время
,
при вызове без аргументов
возвращает текущую дату и время,
кодируется как число.
(В большинстве систем
это число — количество секунд, прошедших с некоторой эпохи. )
При вызове со столом,
возвращает число, представляющее
Дата и время, указанные в таблице.
Такие таблицы дат имеют следующие значимые поля:
year | a full year | ||
month | 01-12 | ||
day | 01-31 | ||
hour | 00-23 | ||
мин. | 00-59 | ||
СЕД | 00-59 | ||
ISDST | ABOLEAN, . Истинно | ABOOLEAN, 090. TRUE | ABOLEAN, .0009 |
Первые три поля являются обязательными; другие по умолчанию полдень (12:00:00), если они не указаны. В системе Unix (где эпоха 00:00:00 UTC, 1 января 1970 г.) бег в Рио-де-Жанейро (это в трех часах езды к западу от Гринвича), у нас есть следующие примеры:
-- obs: 10800 = 3*60*60 (3 часа) print(os. time{год=1970, месяц=1, день=1, час=0}) --> 10800 print(os.time{год=1970, месяц=1, день=1, час=0, сек=1}) --> 10801 печать (ос. время {год = 1970, месяц=1, день=1}) --> 54000 (наблюданий: 54000 = 10800 + 12*60*60)
Функция даты
, несмотря на ее название,
является своего рода обратной функцией time
:
Он преобразует число, представляющее дату и время
вернуться к некоторому представлению более высокого уровня.
Его первый параметр — это строка формата ,
описывающее представление, которое мы хотим.
Второй — числовая дата-время;
по умолчанию используются текущие дата и время.
Чтобы создать таблицу дат,
мы используем строку формата "*т"
.
Например, следующий код
темп = os.date("*t", 0490)производит таблицу
{год = 1998, месяц = 9, день = 16, yday = 259, wday = 4, час = 23, мин = 48, сек = 10, isdst = ложь}Обратите внимание, что помимо полей, используемых
os. time
,
таблица, созданная os.date
, также дает день недели
( wday
, 1 — воскресенье)
и день года ( yday
, 1 — 1 января). Для строк других форматов os.date
форматирует дату как строку,
которая является копией строки формата, в которой указаны определенные теги.
заменены информацией о времени и дате.
Все теги представлены ` %
‘, за которым следует буква,
как в следующих примерах:
print(os.date("сегодня %A, в %B")) --> сегодня вторник, в мае печать (ос.дата ("% x", 0490)) --> 16.09.1998Все представления соответствуют текущей локали. Следовательно, в локали для бразильского и португальского языка
%B
приведет к "setembro"
и %x
в "16/09/98"
.В следующей таблице показан каждый тег, его значение, и его значение на 16 сентября 1998 г. (среда), в 23:48:10. Для числовых значений таблица также показывает их диапазон возможных значений:
%A | Сокращенное название в будние дни (например, Ср ) | ||
%A | Полное имя в неделю (например, среда | 0025) | |
%B | Сокращенное имя месяца (например, сентября ) | ||
%B | Полный месяц. | Дата и время (например, 16.09.98 23:48:10 ) | |
%D | День месяца ( 16 ) [01-31] | 7) [01-31] | |
492449244) %H | час в 24-часовом формате ( 23 ) [00-23] | ||
%I | hour, using a 12-hour clock ( 11 ) [01-12] | ||
%M | minute ( 48 ) [00-59] | ||
%M | Месяц ( 09 ) [01-12] | ||
%с | 77 7. " или %" | 77 " или» или | 77" или |
%S | секунд ( 10 ) [00-61] | ||
%W | Weekday ( 3 ) [0-6 = воскресенье- | ||
%x | Дата. /16/98 ) | ||
%x | Время (например, 23:48:10 ) | ||
%Y | Полный год ( 1998 ). %y | двузначный год ( 98 ) [00-99] | |
%% | символ ` % ´ |
Если вы вызываете дату
без аргументов,
он использует формат %c
, т. е.
полная информация о дате и времени в разумном формате.
Обратите внимание, что представления для %x
, %X
и %c
изменяются в зависимости от локали и системы.
Если вы хотите фиксированное представление,
например, мм/дд/гггг
,
используйте явную строку формата, например "%m/%d/%Y"
.
Функция os.clock
возвращает количество секунд
Процессорное время для программы.
Его типичное использование — бенчмаркинг фрагмента кода:
местный x = os. clock() локальный s = 0 для i=1,100000 do s = s + i конец print(string.format("Прошедшее время: %.2f\n", os.clock() - x))
Copyright © 2003–2004 Роберто Иерусалимский. Все права защищены. |
Как использовать классы времени и даты Ruby (с примерами)
Время — это класс в Ruby, который помогает вам представить определенный момент времени.
Прочитав эту статью, вы узнаете все, что вам нужно знать, чтобы стать мастером времени Ruby!
Рассматриваемые темы :
- Как преобразовать строки в объекты времени
- Как разбить время на составляющие (день/часы/миллисекунды…)
- Как использовать классы
Date
,DateTime
иTime
в Ruby - Как отформатировать время любым удобным для вас способом
- Как найти разницу между двумя объектами
Время
Давайте сделаем это!
Класс Ruby Time
Вы можете использовать класс Time
в Ruby для представления времени и даты.
Эта дата состоит из трех компонентов:
- день
- месяц
- год
И время :
- часов
- минут
- секунд
Эта информация хранится в классе Time
как количество секунд, прошедших с начала эпохи, также известное как время Unix.
Существует несколько способов инициализации объекта Time
:
- Вы можете получить объект, представляющий текущее время, используя
Time.now
- Вы можете создать объект
Time
, используя временную метку Unix и методat
9.0372 - Вы можете указать дату начала в цифрах
Time.new
(формат: год/месяц/день)
Как это :
время.сейчас # 2018-10-19 15:43:20 +0200 Время.новый(2018, 1, 1) # 2018-01-01 00:00:00 +0100 Время.в(15000000000) # 2017-07-14 04:40:00 +0200
Вы можете запросить у объекта времени любой из его компонентов.
Например…
Вы можете спросить, какой день, месяц или час представляет временной объект:
t = время.сейчас ставит t.day ставит t.месяц ставит т.час
Кроме того, вы также можете спросить, соответствует ли эта дата определенному дню недели.
Например, :
«Это дата воскресенье?».
Это предикатные методы, они возвращают либо true
, либо false
.
Пример :
t = время.сейчас ставит t.monday? ставит т.воскресенье? ставит т.пятница?
Попробуйте!
Часовые пояса
Объект Time
имеет связанный с ним часовой пояс.
Вы можете проверить текущий часовой пояс для объекта Time
, используя метод zone
.
Это даст вам аббревиатуру часового пояса.
Если вам нужно смещение часового пояса , вы можете использовать метод utc_offset
. Результат для этого метода находится в секундах, но вы можете разделить на 3600, чтобы получить его в часах.
Пример :
t = время.сейчас т.зона # "Центральноевропейское время" t.utc_offset / 3600 № 1
Вы также можете получить текущее время в формате UTC:
Время.сейчас.utc
Ruby Time Formatting
Ruby форматирует объекты Time
определенным образом по умолчанию.
Но вам может понадобиться что-то еще.
То, что адаптируется к вашему варианту использования .
Хорошие новости!
Вы можете использовать метод для получения почти любого формата, который вам нужен .
Этот метод strftime
, что в основном означает «время форматирования».
Работает путем передачи строки со спецификаторами формата, эти спецификаторы будут заменены значением. Если вы когда-либо использовали 9Метод 0024 printf идея очень похожа на этот.
Давайте посмотрим несколько примеров :
время = Время.новое time.strftime("%d/%m/%Y") # "12.05.2015" time.strftime("%k:%M") # "17:48" time.strftime("%I:%M %p") # "23:04" time.strftime("Сегодня %A") # "Сегодня воскресенье" time.strftime("%d из %B, %Y") # "21 декабря 2015" time.strftime("Время Unix: %s") # "Время Unix: 1449336630"
Как видите, этот метод очень гибкий. Вы можете получить время без даты или хорошо отформатированную дату с годом, днем и названием текущего месяца.
Таблица формата Strftime
Формат | Описание |
---|---|
%d | День месяца (01..31) |
%м | Месяц года (01..12) Используйте %-m для (1..12) |
%к | Час (0. .23) |
%М | минут |
%S | Секунды (00..60) |
%I | Час (1..12) |
%р | утра/вечера |
%Y | Год |
%А | День недели (имя) |
%В | Месяц (имя) |
Дополнительную информацию о различных форматах можно найти по следующим ссылкам:
- http://strftime.net/
- http://devdocs.io/ruby/time#method-i-strftime
Создание метки времени
Вы можете сгенерировать независимую от часового пояса отметку времени для дат определенных событий.
Вот как :
Time.now.to_i
№ 15405
Эта метка времени представляет собой количество секунд в формате UTC (Всемирное координированное время).
Разница во времени (сложение и вычитание)
Иногда вам нужно не текущее время, а время в будущем или прошлом.
Вы можете делать сложение с объектами времени!
Помните, что внутреннее представление для Время
в секундах, поэтому вы можете сделать это:
# Добавить десять секунд время = время.новое + 10
В этом примере вы получаете объект времени, который устанавливается через 10 секунд от текущего времени.
Затем вы можете проверить, прошло ли это время.
Время.новый > время
Если вы хотите получить что-то вроде вчерашнего дня, вам нужно будет рассчитать, сколько секунд в дне.
Как это :
# секунд * минут * часов 60*60*24 № 86400
Теперь с этим номером мы можем вывести это из текущей даты:
Время.сейчас - 86400
Если вы используете Rails, вы можете сделать это:
Время. сейчас - 1.день
Класс Date
Класс Date
не имеет понятия минут, секунд или часов. Этот класс хранит все внутри с точки зрения дней.
Чтобы использовать класс Date
, вам необходимо потребовать 'date'
.
Вы можете получить текущую дату, используя Дата.сегодня
.
В отличие от времени, Date.new
не является псевдонимом для сегодня
, так что имейте это в виду.
Date.today # Текущая дата Date.new # Возвращает отрицательную дату
Арифметика даты аналогична классу Time
, разница в том, что вы добавляете дни вместо секунд.
Date.today + 1 # Добавляет один день
A Дата
ничего не знает о часах, секундах или минутах, поэтому используйте этот класс, только если они вам не нужны.
Анализ даты и времени
Метод Date. parse
попытается проанализировать любую строку, похожую на дату.
Он использует простой эвристический алгоритм, который пытается определить формат ввода.
Иногда это приводит к нежелательным результатам.
Примеры :
Date.parse("10/10/2010") # -> 2010-10-10 Date.parse("3 сентября") # -> 2015-09-03 Date.parse("Можно мне чашечку кофе, пожалуйста?") # -> 1 мая
Если вам нужно что-то более строгое, вы можете использовать Date.iso8601
метод.
Дата iso8601
имеет следующий формат:
год месяц день
Исключение ArgumentError
будет вызвано недопустимым вводом.
Пример :
Дата.iso8601 ("2018-10-01")
Вы можете использовать метод Date.strptime
и набор описателей формата, чтобы предоставить свой собственный формат ввода. Это те же спецификаторы, которые вы можете использовать для strftime 9.0025 .
Пример :
Date.strptime("3 сентября", "%d из %B") # 2015-09-03
Вы можете анализировать время с помощью класса Time
.
Другими словами :
Как преобразовать строку типа «2018-01-01 00:00» в объект времени!
Вот пример :
требуют «времени» Time.parse("20 сентября 18:00")
Если вы хотите указать формат вашей входной строки, вы можете использовать метод strptime
.
Как это :
требуют «времени» Time.strptime("1 декабря 2017", "%d из %B %Y")
Единственная разница между Time.parse
и Date.parse
— это вид объекта, который вы возвращаете ( Time
или Date
).
Константы даты
Класс Date
содержит некоторые константы, которые могут оказаться полезными.
Например, есть массив с месяцами года и другой с днями недели.
Месяцы начинаются с индекса 1, поэтому вы можете получить прямой номер месяца -> сопоставление имени месяца
.
Дни начинаются с воскресенья, но вы можете использовать метод rotate
, чтобы неделя начиналась с понедельника.
Дата::НАЗВАНИЯ МЕСЯЦЕВ # (индекс 0 = ноль) Дата::DAYNAMES.rotate(1)
Класс DateTime
Класс DateTime
является подклассом Date
и может хранить секунды в дополнение к датам.
Пример :
требуется «дата» DateTime.суперкласс # Дата DateTime.now # DateTime: 2018-10-15T16:06:39+02:00
Оба Time
и DateTime
могут выполнять одну и ту же работу, с основным отличием в том, что Time
реализован в C
, поэтому он будет быстрее.
Производительность :
Сравнение: Время: 2644596,6 i/s DateTime: 231634,8 i/s — в 11,42 раза медленнее
ActiveSupport — методы времени и даты
Если вы использовали Rails, вы, вероятно, знакомы с такими вещами, как 3. days.ago
.
Эти методы недоступны в чистом Ruby, они добавлены компонентом ActiveSupport
Rails.
Здесь вы можете найти несколько примеров, обратите внимание, что эти методы возвращают не объекты Time
или Date
, а пользовательский класс ActiveSupport
.
1.час.до_я # 3600 1.день # ActiveSupport::Duration 3.дня.назад # ActiveSupport::TimeWithZone
Вы можете вычислить время и получить такие вещи, как завтрашняя дата:
Время.сейчас + 1.день
Другие эксклюзивные методы времени Rails:
дата = Время.текущее дата.изменить(час: 20) date.at_beginning_of_day
И для форматирования:
дата = Дата.сегодня date.to_formatted_s(:short) # "16 июля" date.to_formatted_s(:long) # "16 июля 2018 г."
Код этих методов на самом деле довольно прост, вам стоит взглянуть.