В данной статье рассмотрим, как с помощью языка программирования Python можно узнать, сколько времени прошло с определенного момента. Для этого мы будем использовать стандартный модуль datetime .
Работа с модулем datetime
Модуль datetime предоставляет классы для работы с датами, временем и временными интервалами. Самый основной класс — datetime — является комбинацией даты и времени.
import datetime now = datetime.datetime.now() print(now)
Выполнение кода выше даст вам текущую дату и время.
Вычисление разницы во времени
Чтобы узнать, сколько времени прошло с определенного момента, необходимо вычесть из текущего времени желаемое время. Рассмотрим пример:
import datetime start_time = datetime.datetime(2023, 5, 2, 12, 0, 0) current_time = datetime.datetime.now() time_passed = current_time — start_time print(time_passed)
Здесь мы создали переменную start_time с фиксированным временем, а затем вычли ее из текущего времени, чтобы получить время, прошедшее с этого момента.
СКОЛЬКО ВРЕМЕНИ НУЖНО, ЧТОБЫ ВЫУЧИТЬ PYTHON?
Форматирование времени
Вы можете отформатировать выводимое время, используя метод strftime . Пример:
import datetime start_time = datetime.datetime(2023, 5, 2, 12, 0, 0) current_time = datetime.datetime.now() time_passed = current_time — start_time formatted_time_passed = time_passed.total_seconds() print(«Прошло времени (в секундах):», formatted_time_passed)
В данном примере мы использовали метод total_seconds для преобразования временного интервала в секунды.
Заключение
Теперь вы знаете, как использовать модуль datetime в Python для определения прошедшего времени с определенного момента. Этот подход может быть полезен для оценки времени выполнения программы, а также для работы с датами и временем вообще.
Дополнительные возможности
Кроме основных операций с временем, модуль datetime предоставляет дополнительные возможности для работы с датами и временем. Рассмотрим некоторые из них.
Сравнение дат и времени
Python позволяет сравнивать объекты типа datetime напрямую, используя стандартные операторы сравнения:
import datetime time1 = datetime.datetime(2023, 5, 2, 12, 0, 0) time2 = datetime.datetime(2023, 5, 3, 12, 0, 0) if time1 > time2: print(«time1 больше time2») elif time1 < time2: print(«time1 меньше time2») else: print(«time1 равно time2»)
Этот код сравнивает две даты и выводит результат сравнения.
Работа с часовыми поясами
Чтобы работать с часовыми поясами, можно использовать модуль pytz . Он предоставляет базу данных часовых поясов, которую можно использовать для преобразования дат и времени. Пример:
import datetime import pytz utc_time = datetime.datetime.now(pytz.utc) local_time = utc_time.astimezone(pytz.timezone(‘Europe/Moscow’)) print(«UTC время:», utc_time) print(«Местное время (Москва):», local_time)
В данном примере мы получили текущее время в UTC и затем преобразовали его в местное время для Москвы.
Как выучить Python? Самый аху#### способ!
Работа с календарем
Python предоставляет модуль calendar для работы с календарями. С его помощью можно генерировать календарь в текстовом виде, а также выполнять различные операции с датами. Пример:
import calendar cal = calendar.month(2023, 5) print(«Календарь на май 2023 года:») print(cal)
Этот код выводит календарь на май 2023 года.
Заключение
В этой статье мы рассмотрели основные возможности работы с датами и временем в Python, а также некоторые дополнительные инструменты для работы с календарями и часовыми поясами. Эти знания помог
Источник: www.articleshub.net
Наперегонки со временем: на что способен Python в однопоточных вычислениях?
Языки программирования изначально проектируются для решения определённых групп задач, и каждый по-своему удобен и уникален. Известный долгожитель, язык C, используется в разработке системного программного обеспечения. C#, детище компании Microsoft, незаменим при написании десктопных приложений для Windows, а старичок PHP по-прежнему полезен в работе с бэкендом. Неужели за десятилетия существования программирования не было попыток создать единый, универсальный язык, подобный кольцу всевластия, которое правит всеми?
К сожалению, всё не так просто. Как не существует универсального закона Вселенной, так не существует и языка, способного эту Вселенную описать. Каждый язык программирования, спроектированный с прицелом на решение определённого набора задач, в чём-то сильно уступает остальным языкам. Где проходят границы применимости языков?
В поиске ответа на этот вопрос некоторые программисты осуществляют интересные эксперименты. Об одном из таких опытов пойдёт речь чуть ниже.
Разработчик Валерий Голенков из компании Sibedge более 10 лет пишет приложения на разных языках. Однажды знакомый попросил его помочь с объёмным расчётом систем уравнений для научного проекта. Валерий решил попробовать решить задачу при помощи языка Python, который, согласно исследованиям IEEE Spectrum, занимает первое место в рейтинге популярности среди программистов, а также активно используется для научных расчётов в составе пакета Anaconda.
Слишком много данных
Вот так выглядят исходные системы уравнений:
Пусть вас не пугает массивность систем — даже начинающий программист сможет перевести эти формулы в код. Но здесь, прямо как в старом анекдоте, есть один нюанс: каждое последующее вычисление функций зависит от предыдущего. Это значит, что распараллелить процесс не получится и считать всё придётся последовательно.
Ситуация усугубляется ещё и тем, что значение функций нужно рассчитать на временном отрезке протяжённостью в 10 дней с частотой в 1 наносекунду. Ядерная физика — это вам не шутки. 1 миллиард вычислений в секунду по четырём значениям с плавающей точкой и 864 триллиона вычислений в общей сложности.
Tech Lead/Senior Python developer на продукт Data Quality (DataOps Platform) МТС , Москва, можно удалённо , По итогам собеседования
Все эти вычисления требуются для изображения различных временных участков на графике, что позволит учёным оценить поведение системы. Назревает вопрос: как системе управления базами данных не захлебнуться от такого огромного потока информации? Решение было найдено быстро. Раз системы меняются по очереди, в базу можно сохранять только пограничные значения режимов, при необходимости рассчитывая промежуточные данные на ходу. При таком подходе процесс можно будет частично распараллелить, передавая на потоки отдельные временные промежутки.
Первые расчёты
Как пелось в одной небезызвестной песне: «В жизни важен первый шаг». Таким шагом на пути к решению нашей задачи является черновой вариант программы, созданный для примерной оценки времени расчёта. В нём системы уравнений реализованы как функции языка (в листинге ниже приведён фрагмент с расчётом второй системы). На вход они получают четыре рациональных числа (x, y, z, t), а обратно возвращают три (x, y, z).
def calculate_pause(data: Tuple4float) -> Tuple3float: x, y, z, t = data exp_lmbt = exp(-Consts.L * t) y_n = y * exp_lmbt z_n = z + y_n * (1 — exp_lmbt) return x, y_n, z_n
Начальные значения функций, длительность расчёта и прочие константы будем хранить во внешнем файле формата JSON и загружать его при запуске в статическое поле класса настроек с помощью статического же метода.
Для удобства упростим обращение к полям в классе настроек при помощи метакласса. В функции main создадим основной цикл с управляющей переменной mode . Эта переменная будет хранить информацию о том, по какой системе в данную итерацию считать значения функций. Здесь же производится вызов расчёта функций. Easy!
Считает наша программа отлично, но медленно. На обработку отрезка в 0.1 секунды уходит 338.19 секунд реального времени. Внезапно наступает осознание того, что до конца расчёта десятидневного отрезка руководитель проекта может не дожить. Ведь окончания процесса ему придётся ждать более 90 лет. Не будем изобретать машину времени, а вместо этого начнём оптимизировать программу.
Начинаем оптимизацию
Поработаем со структурами и алгоритмами. Когда накидываешь код вслепую, обычно рассматриваешь структуры с точки зрения удобства их использования. В нашем случае — это хранение всех настроек программы в модифицированном классе Settings . Однако, если в Python нужен быстрый доступ к некоторым настройкам, лучше рассмотреть вариант их раздельного хранения в структурах с быстрым доступом. Например, определённые константы для расчёта можно сохранить в namedtuple — immutable (read-only или неизменяемом) контейнере, или использовать самодельный класс с __slots__ как mutable (изменяемый, расширяемый). Причём второй в некоторых случаях лучше первого, так как специфика __slots__ разрабатывалась для экономии памяти.
Что это такое? Это статическое поле класса, в котором содержится список его атрибутов. Визуально просто, но сложно внутри. Если в классе содержится это поле, то все описанные атрибуты класса помещаются CPython в массив фиксированного размера, обращаться к которому будет намного быстрее.
Минус такого подхода — больше вы не сможете присваивать другие параметры объектам данного класса. Но в нашем случае скорость важнее.
class Foo: __slots__ = [‘a’, ‘b’] boo = Foo() boo.a, boo.b = 1, 2 boo.c = 2 # AttributeError Foo = namedtuple(‘Foo’, [‘a’, ‘b’]) boo = Foo(1, 2) boo.b = 3 # AttributeError
Работа со временем в Python
При создании программ, периодически приходится работать с датой и временем. В Python работа с датой и временем начинается с импорта модуля time и использования функций из данного модуля.
Базовым термином при работе со временем в Python является термин tick — тик. Данный термин означает количество секунд прошедших с 12:00 1 января 1970. Эта дата по другому называется — эпоха. Временные интервалы представлены количеством секунд (число с плавающей точкой), прошедших с начала данной эпохи.
Модуль Python time позволяет манипулировать датой и временем. Функция time.time() возвращает текущее время системы в тиках начиная с эпохи.
Пример:
# импорт модуля
import time
sec = time.time()
print( ‘Количество секунд прошедших с 12:00 1 Января 1970 составляет ‘ + sec )
С данным представлением времени в тиках очень легко и удобно производить различные арифметические операции. Но, учтите что диапазон дат, которыми можно манипулировать с помощью данного модуля ограничен снизу 1970, и сверху 2038 годами. Т.е. даты раньше и позже представлены быть не могут с помощью данного модуля.
Следующей базовой компонентой работы с датой и временем в Python является так называемый «кортеж времени — TimeTuple». О кортежах я уже рассказывал, кратко напомню, что это просто нередактируемые списки.
Итак, TimeTuple — это на самом деле класс time.struct_time, который расширяет встроенный в Python класс tuple. Если вы уже знакомы с PHP или Java, то такие термины как класс и наследование должны быть вам знакомы. И так как Python мультипарадигменный язык в нем присутствуют классы и ООП, но об этом уже в другой статье. Состав объекта TimeTuple:
Индекс Поле класса Атрибут Пример значения
0 год — 4 цифры tm_year 2019
1 Число месяца tm_mon [1,12]
2 День tm_mday [1,31]
3 Час tm_hour [0,23]
4 Минута tm_min [0,59]
5 Секунды tm_sec [0,61] (60 или 61 — это секунда координации)
6 День недели tm_wday [0,6] (0 — понедельник, но это поведение можно переопределить)
7 День года tm_yday [1,366]
8 Летнее время tm_isdst -1, 0, 1
Здесь Атрибут — это поле объекта, к которому можно обращаться через оператор точка [.]. Далее я покажу пример.
Как получить текущее время в Python?
Цифровое представление удобно для компьютера, но не для человека, поэтому, чтобы преобразовать секунды в объект struct_time, с которым уже понятнее работать, нам необходимо выполнить следующее:
from time import localtime, time
loc = localtime( time() )
print (‘Ваше текущее время ‘ + loc)
# Результат
# time.struct_time(tm_year=2019, tm_mon=11, tm_mday=9, tm_hour=13, tm_min=37, tm_sec=1, tm_wday=5, tm_yday=313, tm_isdst=0)
# пример того, как можно обращаться к полю объекта
print ( ‘До конца года осталось: ‘ + 366 — loc.tm_yday )
Как отформатировать время?
В модуле time много разных функции, одна из таких функции time.strftime предназначена для форматирования даты в соответствии с определенным шаблоном. По своему функционалу она похожа на такую же функцию из PHP, разве что формат строки будет несколько отличен.
Итак давайте выведем дату и время в более привычном для нас формате. Как это сделать будет показано в примере далее:
ft = time.strftime(‘%d/%m/%Y %H:%M:%S’)
print( ft )
%d, %m, %Y и др. — это спецификаторы, представляющие какой-то отдельный компонент времени. Таких спецификаторов более 30.
Таким образом, Python позволяет очень просто работать с датой и временем, а также форматировать время, представленное количеством секунд в любой удобный формат.
Создано 12.11.2019 12:51:57
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Источник: myrusakov.ru