Статьи

Стрелка для лучшей даты и времени в Python

Управление датой и временем является распространенным сценарием на любом языке программирования. Без помощи удобной библиотеки она может стать утомительной работой, требующей достаточных усилий. Давайте посмотрим на библиотеку 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 в местное время для отображения в веб-приложении на основе времени. зона.

Чтобы использовать 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? Какова ваша точка зрения? Были ли у вас какие-либо проблемы при использовании библиотеки? Дайте нам знать ваши мысли и предложения в комментариях ниже.