Управление датой и временем является распространенным сценарием на любом языке программирования. Без помощи удобной библиотеки она может стать утомительной работой, требующей достаточных усилий. Давайте посмотрим на библиотеку Arrow
, которая вдохновлена популярными библиотеками Python Moment.js
и Requests
. Arrow обеспечивает дружественный подход для обработки даты и времени, создания и т. Д.
Из официальной документации:
Arrow — это библиотека Python, которая предлагает разумный, дружественный к человеку подход к созданию, обработке, форматированию и преобразованию дат, времени и временных отметок. Он реализует и обновляет тип datetime, устраняя пробелы в функциональности, и предоставляет API интеллектуального модуля, который поддерживает многие распространенные сценарии создания.
Начало работы со стрелкой
Чтобы начать работу с библиотекой Arrow
, в вашей системе должен быть установлен Python. Также убедитесь, что в вашей среде установлен pip
, менеджер пакетов Python.
Теперь установите Arrow используя pip.
1
|
pip install arrow
|
Вы узнаете, как использовать Arrow в своем проекте разработки веб-приложения для манипуляции с датой и временем, создания и т. Д. Итак, начнем с создания веб-приложения с использованием Python Flask.
Используя pip, установите Python Flask, если он еще не установлен.
1
|
pip install Flask
|
Создайте файл с именем app.py
который будет файлом приложения Python. Добавьте следующий код в app.py
:
1
2
3
4
5
6
7
8
9
|
from flask import Flask
app = Flask(__name__)
@app.route(«/»)
def hello():
return «Welcome to Arrow Library»
if __name__ == ‘__main__’:
app.run()
|
Сохраните вышеуказанные изменения и запустите приложение, используя python app.py
, и приложение должно быть запущено по адресу http: // localhost: 5000 / .
Местное время по UTC и наоборот
Одним из наиболее распространенных сценариев, с которыми вы сталкиваетесь в проекте разработки веб-приложения, является выборка местного времени, преобразование местного времени в UTC (всемирное координированное время), а затем преобразование времени UTC в местное время для отображения в веб-приложении на основе времени. зона.
Чтобы использовать Arrow
в вашем проекте Python Flask, вам нужно импортировать библиотеку в app.py
1
|
import arrow
|
После того, как он импортирован, вы можете сразу использовать объект стрелки для манипуляции датой и временем и создания.
Давайте создадим маршрут и метод для получения местного времени. Добавьте маршрут с именем getLocalTime
и соответствующий ему метод. Стрелка предоставляет метод, вызываемый now
чтобы получить текущее местное время. Используйте метод now
чтобы получить местное время и вернуть дату, которую необходимо преобразовать в формат ISO. Вот как выглядит код:
1
2
3
4
|
@app.route(«/getLocalTime»)
def getLocalTime():
local = arrow.now()
return local.isoformat()
|
Сохраните вышеуказанные изменения и перезагрузите сервер. Укажите в браузере http: // localhost: 5000 / getLocalTime, и вы сможете увидеть местное время.
Обычно вы склонны сохранять дату и время в формате UTC в базах данных и отображать местное время путем преобразования времени UTC в местное время. Итак, давайте посмотрим, как преобразовать местное время в UTC для хранения базы данных.
Создайте маршрут и метод с именем getCurrentUtcTime
. Чтобы получить текущее время UTC, стрелка предоставляет метод с именем utcnow
. Вы можете использовать его, чтобы получить текущее время UTC, как показано:
1
2
3
4
|
@app.route(«/getCurrentUtcTime»)
def getCurrentUtcTime():
utc = arrow.utcnow()
return utc.isoformat()
|
Вышеуказанный метод получает текущее время UTC. Если у вас уже есть дата и время, для которого вы хотите получить UTC, стрелка предоставляет метод для этого. Используя метод to
, вам нужно указать часовой пояс, в который вам нужно конвертировать дату и время. Итак, вот как вы можете преобразовать местное время в UTC:
1
2
3
4
5
|
@app.route(«/getUtcTime»)
def getUtcTime():
local = arrow.now()
utc = local.to(‘utc’)
return utc.isoformat()
|
Когда вы сохраняете дату и время в базе данных, вы сохраняете ее как метку времени. Чтобы получить метку времени UTC, вам нужно вызвать атрибут .timestamp
объекта.
1
|
arrow.now().timestamp
|
Вы не можете отобразить метку времени UTC при отображении данных на стороне клиента. Вам необходимо преобразовать метку времени UTC в местное время. Для этого сначала нужно создать объект стрелки с arrow.get
метода arrow.get
. Затем вы можете использовать метод arrow.to
для преобразования времени UTC в местное время. Вот как выглядит код:
1
2
3
4
5
6
|
@app.route(«/convertUtcToLocal»)
def convertUtcToLocal():
local = arrow.now()
utcTimeStamp = local.to(‘utc’).timestamp
localDateObj = arrow.get(utcTimeStamp).to(‘local’)
return localDateObj.isoformat()
|
Сохраните вышеуказанные изменения и перезагрузите сервер. Укажите в браузере http: // localhost: 5000 / convertUtcToLocal, и вы сможете просматривать местное время, полученное путем преобразования метки времени UTC в местное время.
Манипуляции с датой и временем
В большинстве случаев требуется манипулировать датой и временем, добавляя или удаляя несколько часов, минут и т. Д. К объекту datetime. Arrow предоставляет два метода replace
и shift
для управления объектом datetime.
Допустим, у вас есть объект стрелки даты и времени. Теперь вы хотите заменить несколько вещей в объекте datetime. Вы хотите изменить минуты и секунды даты и времени.
1
2
3
|
>>> localDateTime = arrow.now()
>>> localDateTime
<Arrow [2017-09-29T07:39:29.237652+05:30]>
|
Чтобы заменить минуты и секунды localDateTime
, вы можете использовать метод replace
предоставляемый библиотекой стрелок. Вот как выглядит синтаксис:
1
2
|
>>> localDateTime.replace(minute = 01,second = 01)
<Arrow [2017-09-29T07:01:01.237652+05:30]>
|
Если вы хотите увеличить дату / время на определенный параметр, такой как день, час, неделя и т. Д., Вы можете использовать метод shift
. Все, что вам нужно сделать, это предоставить параметр, с помощью которого вам нужно сместить дату и время. Допустим, вам нужно увеличить дату и время на один день. Код будет выглядеть так:
1
2
3
4
5
|
>>> localDateTime = arrow.now()
>>> localDateTime
<Arrow [2017-09-29T08:03:57.806785+05:30]>
>>> localDateTime.shift(days = +1)
<Arrow [2017-09-30T08:03:57.806785+05:30]>
|
Чтобы уменьшить дату и время на два дня, код будет выглядеть так:
1
2
|
>>> localDateTime.shift(days = -2)
<Arrow [2017-09-27T08:03:57.806785+05:30]>
|
Форматирование даты с помощью стрелки
Чтобы отформатировать дату и время в соответствии с вашим пользовательским форматом, вы можете использовать метод format
указанный стрелкой.
Например, для форматирования даты и времени в YYYY-MM-DD
необходимо использовать следующий код:
1
2
3
4
5
|
>>> localDateTime = arrow.now()
>>> localDateTime
<Arrow [2017-09-29T08:32:28.309863+05:30]>
>>> localDateTime.format(‘YYYY-MM-DD’)
u’2017-09-29′
|
Аналогично, для форматирования даты и времени в YYYY-MM-DD HH:mm:ss
необходимо использовать следующий код:
1
2
3
4
|
>>> localDateTime
<Arrow [2017-09-29T08:32:28.309863+05:30]>
>>> localDateTime.format(‘YYYY-MM-DD HH:mm:ss’)
u’2017-09-29 08:32:28′
|
Удобное для человека представление даты и времени
Arrow предоставляет метод под названием humanize
для представления даты и времени в удобном для человека представлении. Большую часть времени пользователю необходимо знать, сколько времени прошло с определенного времени. Вы можете использовать метод humanize
чтобы показать пользователю, сколько времени прошло с тех пор. Вот пример кода:
1
2
3
4
5
|
>>> currentDate = arrow.now()
>>> currentDate
<Arrow [2017-09-29T22:05:26.940228+05:30]>
>>> currentDate.humanize()
u’just now’
|
Как видно из вышеприведенного кода, если вы используете humanize для представления того, сколько времени прошло с текущей даты-времени, то будет показан вышеуказанный результат.
Теперь давайте посмотрим на предыдущую дату.
1
2
3
4
5
|
>>> earlierDate = arrow.now().shift(days=-3)
>>> earlierDate
<Arrow [2017-09-26T22:07:39.610546+05:30]>
>>> earlierDate.humanize()
u’3 days ago’
|
Как видно из приведенного выше кода, вы только что использовали метод humanize
с более ранней датой, и он показывает относительное количество дней с текущей датой.
Вы также можете использовать humanize
чтобы показать относительное количество дней между двумя датами. Например:
1
2
3
4
5
6
7
8
|
>>> laterDate = arrow.now().shift(days=+3)
>>> laterDate
<Arrow [2017-10-02T22:10:58.505234+05:30]>
>>> earlierDate = arrow.now().shift(days=-3)
>>> earlierDate
<Arrow [2017-09-26T22:11:11.927570+05:30]>
>>> earlierDate.humanize(laterDate)
u’5 days ago’
|
Как видно из приведенного выше примера, вы создали более позднюю дату и более раннюю дату, сместив количество дней. Затем вы проверили относительное количество дней от earlierDate
до более laterDate
используя метод humanize
, который напечатал указанное выше сообщение.
Преобразование в другой часовой пояс
Стрелка предоставляет метод convert
для преобразования местного времени в предпочтительный часовой пояс. Например, чтобы преобразовать местное время в UTC, вы можете использовать следующую команду:
1
2
|
>>> arrow.now().to(‘utc’)
<Arrow [2017-09-30T16:58:45.630252+00:00]>
|
Чтобы преобразовать время UTC обратно в местный часовой пояс, вы можете использовать следующий код:
1
2
3
4
5
|
>>> utcTime = arrow.now().to(‘utc’)
>>> utcTime
<Arrow [2017-09-30T17:01:30.673791+00:00]>
>>> utcTime.to(‘local’)
<Arrow [2017-09-30T22:31:30.673791+05:30]>
|
Чтобы преобразовать время UTC в любой конкретный часовой пояс, вы можете указать часовой пояс, и вы получите время из этого конкретного часового пояса. Например:
1
2
|
>>> utcTime.to(‘America/New_York’)
<Arrow [2017-09-30T13:01:30.673791-04:00]>
|
В приведенном выше коде вы указали время в формате UTC, которое нужно преобразовать в часовой пояс America/New_York
, и аналогичным образом вы можете America/New_York
любой часовой пояс, в который вы хотите преобразовать UTC.
Завершение
В этом уроке вы увидели, как использовать Arrow, библиотеку Python для манипулирования датой и временем, создания и форматирования. С точки зрения разработчика, библиотека Arrow, кажется, полностью подходит для манипуляции с датой и временем при использовании в проекте Python.
Кроме того, не стесняйтесь посмотреть, что у нас есть в наличии для продажи и для обучения в Envato Market , и не стесняйтесь задавать любые вопросы и предоставлять ценные отзывы, используя канал ниже.
У вас есть опыт использования библиотеки Arrow? Какова ваша точка зрения? Были ли у вас какие-либо проблемы при использовании библиотеки? Дайте нам знать ваши мысли и предложения в комментариях ниже.