Python-сообщество
- Начало
- » Python для новичков
- » время
#1 Сен. 17, 2010 14:55:55
voron От: Зарегистрирован: 2010-09-17 Сообщения: 23 Репутация: 0 Профиль Отправить e-mail
время
как быть со временем
вводим в секундах перевести в часы:минуты:секунды
Отредактировано (Сен. 17, 2010 14:56:30)
#2 Сен. 17, 2010 15:20:33
AterCattus От: Зарегистрирован: 2010-09-16 Сообщения: 7 Репутация: 0 Профиль Отправить e-mail
время
#3 Сен. 17, 2010 15:31:04
voron От: Зарегистрирован: 2010-09-17 Сообщения: 23 Репутация: 0 Профиль Отправить e-mail
время
малец недопонел а как будет программа с этим выглядить?
#4 Сен. 17, 2010 15:34:01
AterCattus От: Зарегистрирован: 2010-09-16 Сообщения: 7 Репутация: 0 Профиль Отправить e-mail
время
От вашего кода зависит. В интерактивном режиме выглядит так:
$ python
.
>>> import datetime
>>> str(datetime.timedelta(seconds=int(raw_input())))
12345
'3:25:45'
>>>
Отредактировано (Сен. 17, 2010 15:34:18)
#5 Сен. 17, 2010 15:47:31
voron От: Зарегистрирован: 2010-09-17 Сообщения: 23 Репутация: 0 Профиль Отправить e-mail
время
спаиб
если есть другие способы пишите
#6 Сен. 17, 2010 15:51:54
AterCattus От: Зарегистрирован: 2010-09-16 Сообщения: 7 Репутация: 0 Профиль Отправить e-mail
время
можно divmod, вычленяя компоненты по отдельности.
#7 Сен. 17, 2010 17:11:35
voron От: Зарегистрирован: 2010-09-17 Сообщения: 23 Репутация: 0 Профиль Отправить e-mail
время
#8 Сен. 17, 2010 17:27:42
SETY От: Зарегистрирован: 2010-06-04 Сообщения: 26 Репутация: 0 Профиль Отправить e-mail
время
z=input('ввод числа:')
h=z/3600
m=z%3600/60
s=z%3600%60
print '%i:%i:%i' % (h, m, s)
#9 Сен. 18, 2010 08:52:26
sypper-pit От: Ulan-Ude(msk) Зарегистрирован: 2009-01-30 Сообщения: 1102 Репутация: 6 Профиль Отправить e-mail
время
voron
как быть со временем
вводим в секундах перевести в часы:минуты:секунды
datetime.datetime.now().strftime("The date is %A (%a) %d/%m/%Y"
#10 Сен. 19, 2010 12:41:11
py.user.next От: Зарегистрирован: 2010-04-29 Сообщения: 9636 Репутация: 839 Профиль Отправить e-mail
время
>>> import time
>>> s = time.localtime(12345)
>>> print(s.tm_hour, s.tm_min, s.tm_sec, sep=':') # python 3.x
14:25:45
>>> s
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=14, tm_min=25, tm_sec=45, tm_wday=3, tm_yday=1, tm_isdst=0)
>>>
add
это мне показалось, что нужно узнать часы из секунд
Отредактировано (Сен. 19, 2010 12:48:54)
Модуль datetime

Модуль datetime предоставляет классы для обработки времени и даты разными способами. Поддерживается и стандартный способ представления времени, однако больший упор сделан на простоту манипулирования датой, временем и их частями.
Классы, предоставляемые модулем datetime:
Класс datetime.date(year, month, day) — стандартная дата. Атрибуты: year, month, day. Неизменяемый объект.
Класс datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) — стандартное время, не зависит от даты. Атрибуты: hour, minute, second, microsecond, tzinfo.
Класс datetime.timedelta — разница между двумя моментами времени, с точностью до микросекунд.
Класс datetime.tzinfo — абстрактный базовый класс для информации о временной зоне (например, для учета часового пояса и / или летнего времени).
Класс datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None) — комбинация даты и времени.
- datetime.MINYEAR (1) ≤ year ≤ datetime.MAXYEAR (9999)
- 1 ≤ month ≤ 12
- 1 ≤ day ≤ количество дней в данном месяце и году
Методы класса datetime:
datetime.today() — объект datetime из текущей даты и времени. Работает также, как и datetime.now() со значением tz=None.
datetime.fromtimestamp(timestamp) — дата из стандартного представления времени.
datetime.fromordinal(ordinal) — дата из числа, представляющего собой количество дней, прошедших с 01.01.1970.
datetime.now(tz=None) — объект datetime из текущей даты и времени.
datetime.combine(date, time) — объект datetime из комбинации объектов date и time.
datetime.strptime(date_string, format) — преобразует строку в datetime (так же, как и функция strptime из модуля time).
datetime.strftime(format) — см. функцию strftime из модуля time.
datetime.date() — объект даты (с отсечением времени).
datetime.time() — объект времени (с отсечением даты).
datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]) — возвращает новый объект datetime с изменёнными атрибутами.
datetime.timetuple() — возвращает struct_time из datetime.
datetime.toordinal() — количество дней, прошедших с 01.01.1970.
datetime.timestamp() — возвращает время в секундах с начала эпохи.
datetime.weekday() — день недели в виде числа, понедельник — 0, воскресенье — 6.
datetime.isoweekday() — день недели в виде числа, понедельник — 1, воскресенье — 7.
datetime.isocalendar() — кортеж (год в формате ISO, ISO номер недели, ISO день недели).
datetime.isoformat(sep=’T’) — красивая строка вида «YYYY-MM-DDTHH:MM:SS.mmmmmm» или, если microsecond == 0, «YYYY-MM-DDTHH:MM:SS»
datetime.ctime() — см. ctime() из модуля time.
Пример работы с классом datetime:
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Работа с timestamp (меткой времени) в Python
Timestamp – временная метка (штамп времени, печать времени) – информация о моменте, когда произошло то или иное событие. Так, например, используя timestamp, можно устанавливать и определять время создания и модификации файлов.
Часто timestamp выражают в секундах, прошедших с начала "эпохи Unix", то есть с полуночи 1 января 1970 года по UTC.
Время, выраженное в секундах с начала эпохи Unix, называется также Unix-временем, или POSIX-временем. Такой способ описания моментов бывает удобнее, когда дату и время не требуется представлять в удобном для восприятия человека виде.
В Python для работы с меткой времени предназначен ряд функций из модуля time и несколько методов из datetime .
Что касается модуля time , то многие его функции являются "интерфейсом" к функциям системной библиотеки на языке Си. Поэтому могут быть доступны не во всех операционных системах или работают там иначе.
Сам модуль time в документации Python относится к группе модулей, представляющих доступ к общим службам операционной системы. В данном случае речь идет о системных часах.
Узнать количество секунд, прошедших с начала эпохи Unix до настоящего момента, можно с помощью одноименной модулю функции time() , которая не принимает никаких аргументов:
>>> import time >>> t = time.time() >>> print(t) 1686494808.3473074 >>> type(t)
В данном случае метка времени привязана к системным часам и для нее не существует часового пояса. Если между двумя вызовами time() мы переведем часы назад, то получим меньшее значение, чем предыдущее. Другими словами, системная метка времени может не совпадать с истинным timestamp этого момента – временем по UTC.
Поэтому в модуле предусмотрены две функции – localtime и gmtime – для конвертации секунд либо в локальное время, либо по UTC. В примере ниже им передается текущий момент времени, что не обязательно: можно передать любой, выраженный в секундах. Кроме того, если речь идет о текущем моменте, аргумент можно не передавать.
import time t = time.time() utc = time.gmtime(t) local = time.localtime(t) print(utc) print(local) print(time.asctime(utc)) print(time.asctime(local))
Пример выполнения скрипта на компьютере, часовой пояс которого смещено от UTC на +3 часа (функция asctime используется для вывода объектов struct_time в удобочитаемом виде):
time.struct_time(tm_year=2023, tm_mon=6, tm_mday=13, tm_hour=14, tm_min=56, tm_sec=16, tm_wday=1, tm_yday=164, tm_isdst=0) time.struct_time(tm_year=2023, tm_mon=6, tm_mday=13, tm_hour=17, tm_min=56, tm_sec=16, tm_wday=1, tm_yday=164, tm_isdst=0) Tue Jun 13 14:56:16 2023 Tue Jun 13 17:56:16 2023
В качестве результата функции gmtime и localtime возвращают экземпляры struct_time , которые также не хранят информацию о часовом поясе. Если требуется узнать величину смещения времени на локальном компьютере от UTC, найти его можно в константах altzone и timezone . Смещение здесь выражено в секундах и отрицательно для "плюсовых" часовых поясов (с востока от UTC).
>>> import time >>> time.altzone -10800 >>> time.timezone -10800 >>> time.tzname ('MSK', 'MSK') >>> time.daylight 0
Объекты struct_time в основном используются в рамках работы с модулем time . Если речь идет о преобразовании timestamp в обычное представление даты, следует использовать методы fromtimestamp , utcfromtimestamp экземпляров datetime (первый метод есть также у date ).
import time from datetime import datetime, timedelta, timezone t = time.time() local = datetime.fromtimestamp(t) utc = datetime.utcfromtimestamp(t) print(local) print(utc) zone = timezone(timedelta(seconds=abs(time.timezone))) local = datetime.fromtimestamp(t, zone) print(local)
2023-06-13 18:54:59.968364 2023-06-13 15:54:59.968364 2023-06-13 18:54:59.968364+03:00
Метод utcfromtimestamp выполняет вычисление, какое было время по UTC, когда в это же время была взята метка на локальном компьютере. При этом в отличие от fromtimestamp этот метод не дает возможности получить осведомленное время, передав второй аргумент. При необходимости превращения наивного времени в осведомленное без пересчета следует использовать метод replace .
import time from datetime import datetime, timezone utc = datetime.utcfromtimestamp(time.time()) utc = utc.replace(tzinfo=timezone.utc) print(utc)
2023-06-13 16:23:24.222934+00:00
Для выполнения обратного действия – преобразования имеющейся даты в метку времени – у экземпляров datetime есть метод timestamp . Конвертация происходит в локальное время, но с учетом часового пояса даты, если передается время осведомленное.
from datetime import datetime dm = datetime.strptime('19:00+0300 MSK 21-06-2023', '%H:%M%z %Z %d-%m-%Y') du = datetime.strptime('19:00+0000 UTC 21-06-2023', '%H:%M%z %Z %d-%m-%Y') print(dm.timestamp()) # 1687363200.0 print(du.timestamp()) # 1687374000.0
В примере выше речь идет о разных моментах времени. Временная метка второго больше, чем у первого, то есть второе событие произошло позже. Ведь в это время в Москве было уже 22 часа. Если метод timestamp вызывать на наивные дату-время, то метка будет вычислена по системным часам.
В рамках модуля time перевод в секунды выполняется над экземплярами struct_time . Делается это с помощью функции mktime .
import time t = time.time() print(t) local = time.localtime(t) utc = time.gmtime(t) print(time.asctime(local)) print(time.asctime(utc)) print(time.mktime(local)) print(time.mktime(utc))
1686675715.9385638 Tue Jun 13 20:01:55 2023 Tue Jun 13 17:01:55 2023 1686675715.0 1686664915.0
Функция mktime всегда переводит struct_time в локальное время, так как последний не хранит смещение. В примере выше, получив два разных struct_time одного момента времени и возвращая их обратно в формат timestamp мы получаем уже два разных момента времени. Исходные 17 часов по UTC считаются уже как 17 часов по Москве, что меньше метки времени, соответствующей 20-ти часам.
Поэтому в программе вам самостоятельно надо "запоминать", из локального времени был получен struct_time или из UTC и во втором случае вместо mktime использовать функцию timegm из модуля calendar .
import time import calendar local = time.localtime() utc = time.gmtime() print(time.asctime(local)) print(time.asctime(utc)) print(time.mktime(local)) print(calendar.timegm(utc))
Tue Jun 13 20:14:57 2023 Tue Jun 13 17:14:57 2023 1686676497.0 1686676497
Отметим, что классы date и datetime имеют методы timetuple , а класс datetime также utctimetuple , которые переводят дату в struct_time . Однако и здесь информация о часовом поясе не сохраняется.
import time from datetime import datetime, timedelta, timezone import calendar moscow = timezone(timedelta(hours=3)) # Это одинаковые моменты времени dm = datetime(2023, 6, 11, 19, tzinfo=moscow) du = datetime(2023, 6, 11, 16, tzinfo=timezone.utc) print(dm == du) # True # Это разные struct_time dtm = dm.timetuple() dtu = du.utctimetuple() print(dtm == dtu) # False dtm_stamp = time.mktime(dtm) # Здесь мы помним, что dtu - это момент времени в UTC, # а нам надо получить, сколько в это время было в нашей локали dtu_stamp = calendar.timegm(dtu) print(dtm_stamp == dtu_stamp) # True
X Скрыть Наверх
Даты и время в Python. Курс
Примеры работы с модулем datetime в Python
Задача: имеем объект datetime , необходимо его преобразовать в секунды ( timestamp ).
>>> import datetime # Для преобразования получим объект `datetime`, # содержащий дату и время в настоящий момент >>> dt = datetime.datetime.now() >>> dt # datetime.datetime(2020, 5, 6, 13, 52, 5, 208688) # теперь получаем из `datetime` секунды - `timestamp` >>> second = dt.timestamp() >>> second # 1588762325.208688 # можно быстрее, одной строкой >>> second = datetime.datetime.now().timestamp() # 1588762325.208688 # если не нужны доли секунд, то # преобразуем в тип int >>> int(second) # 1588762325
Преобразуем время в секундах ( timestamp ) в объект datetime :
Задача: имеем время в секундах, необходимо из секунд получить объект datetime , что бы потом что-то сделать.
>>> import datetime # имеем время в секундах second = 1588762325 # преобразовываем секунды в объект 'datetime' # его же методом '.timestamp()' >>> dt = datetime.datetime.fromtimestamp(second) >>> dt # datetime.datetime(2020, 5, 6, 13, 52, 5) # дальше работаем как с объектом # получаем строку >>> dt.strfptint('%d.%m.%Y %H:%M') # '06.05.2020 13:52' # через сколько новый год >>> future_dt = datetime.datetime.strptime('01.01.2021', '%d.%m.%Y') >>> delta = future_dt - dt # через дней >>> delta.days # 239 # секунд >>> delta.seconds # 36475 # месяцев >>> 239 // 30 # 7
Получить объект datetime из отдельных объектов date и time :
>>> import datetime # дата >>> date = datetime.date.today() # время >>> time = datetime.time(23, 55) # интервал >>> delta = datetime.timedelta(minutes=30) # соединяем все вместе >>> datetime.datetime.combine(date, time) + delta # datetime.datetime(2020, 5, 6, 0, 25)
Форматирование вывода строки c датой и временем:
>>> import datetime >>> dt = datetime.datetime.now() >>> dt.strftime('%H:%M - %m.%d.%Y года') # '09:56 - 05.06.2020 года' >>> dt.strftime('%H часов %M минут %m.%d.%Y года') # '09 часов 56 минут 05.06.2020 года' >>> dt.strftime('%m/%d/%y') # '05/06/20' >>> dt.strftime('%Y-%m-%d') # '2020-05-06' # форматирование даты при помощи функции format() >>> 'День: %d>, Месяц: , время: .'.format(dt) # 'День: 06, Месяц: May, время: 09:56.' # форматирование даты при помощи f-строк f'День: dt:%d>, Месяц: dt:%B>, время: dt:%H:%M>' # 'День: 06, Месяц: May, время: 09:56.'
Преобразование строки с датой и временем в объект datetime.datetime() :
>>> import datetime >>> date_str = 'Fri, 24 Apr 2021 16:22:54 +0000' >>> format = '%a, %d %b %Y %H:%M:%S +0000' >>> datetime.datetime.strptime(date_str, format) # datetime.datetime(2021, 4, 24, 16, 22, 54) >>> date_str = '24.12.2020 16:22' >>> format = '%d.%m.%Y %H:%M' >>> datetime.datetime.strptime(date_str, format) # datetime.datetime(2020, 12, 24, 16, 22)
Сложение и вычитание даты и времени:
При вычитании дат получается объект продолжительности - datetime.timedelta()
Подсчет дней до события.
>>> import datetime >>> today = datetime.datetime.now() >>> date = datetime.datetime(2020, 12, 6) >>> delta = date - today >>> delta.days # 213
Подсчет дней прошедших с события.
>>> import datetime >>> date = datetime.datetime(2019, 12, 31) >>> today = datetime.datetime.now() >>> delta = today - date >>> delta.days # 127
Узнать дату и время предстоящего или прошедшего события.
>>> import datetime >>> today = datetime.datetime.now() # узнаем, какая дата будет через 3 недели и 5 дней >>> delta = datetime.timedelta(weeks=3, days=5) >>> date = today + delta >>> date.day, date.month, date.year # (1, 6, 2020) # узнаем, какая дата была 100 дней назад >>> delta = datetime.timedelta(days=100) >>> date = today - delta >>> date.day, date.month, date.year # (27, 1, 2020) # узнаем, сколько время будет через 1 час 30 минут и 45 секунд >>> delta = datetime.timedelta(hours=1, minutes=30, seconds=45) >>> date = today + delta >>> date.hour, date.minute, date.second # (16, 18, 15)
Сравнение объектов datetime.datetime() :
- datetime1 считается меньше datetime2, когда datetime1 предшествует datetime2 во времени
- При сравнении datetime1 c параметром tz не равным None с datetime2 , у которого параметром tz=None вызывается TypeError .
- При сравнений на равенство datetime1 c параметром tz не равным None никогда не будут равен datetime2 , у которого параметром tz=None .
>>> import datetime >>> today = datetime.datetime.now() >>> delta = datetime.timedelta(weeks=3, days=1) >>> date = today - delta >>> date today # True >>> date = today + delta >>> date today # False >>> date > today # True # Сравнение с заранее заданной датой >>> today = datetime.datetime.now() >>> date = datetime.datetime(2020, 5, 6) >>> date.date() == today.date() # True
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Класс timedelta() модуля datetime
- Примеры использования datetime.timedelta()
- Класс date() модуля datetime
- Методы экземпляра datetime.date()
- Примеры использования datetime.date()
- Класс datetime() модуля datetime
- Методы экземпляра datetime.datetime()
- Примеры работы с модулем datetime
- Класс time() модуля datetime
- Класс tzinfo() модуля datetime
- Класс timezone() модуля datetime
- Правила форматирования strftime() и strptime() модуля datetime
