Работа с датами и временем
Основной функционал для работы с датами и временем сосредоточен в модуле datetime в виде следующих классов:
Класс date
Для работы с датами воспользуемся классом date , который определен в модуле datetime. Для создания объекта date мы можем использовать конструктор date, который последовательно принимает три параметра: год, месяц и день.
date(year, month, day)
Например, создадим какую-либо дату:
import datetime yesterday = datetime.date(2017,5, 2) print(yesterday) # 2017-05-02
Если необходимо получить текущую дату, то можно воспользоваться методом today() :
from datetime import date today = date.today() print(today) # 2017-05-03 print("<>.<>.<>".format(today.day, today.month, today.year)) # 2.5.2017
С помощью свойств day, month, year можно получить соответственно день, месяц и год
Класс time
За работу с временем отвечает класс time . Используя его конструктор, можно создать объект времени:
time([hour] [, min] [, sec] [, microsec])
Конструктор последовательно принимает часы, минуты, секунды и микросекунды. Все параметры необязательные, и если мы какой-то параметр не передадим, то соответствующее значение будет инициализироваться нулем.
from datetime import time current_time = time() print(current_time) # 00:00:00 current_time = time(16, 25) print(current_time) # 16:25:00 current_time = time(16, 25, 45) print(current_time) # 16:25:45
Класс datetime
Класс datetime из одноименного модуля объединяет возможности работы с датой и временем. Для создания объекта datetime можно использовать следующий конструктор:
datetime(year, month, day [, hour] [, min] [, sec] [, microsec])
Первые три параметра, представляющие год, месяц и день, являются обязательными. Остальные необязательные, и если мы не укажем для них значения, то по умолчанию они инициализируются нулем.
from datetime import datetime deadline = datetime(2017, 5, 10) print(deadline) # 2017-05-10 00:00:00 deadline = datetime(2017, 5, 10, 4, 30) print(deadline) # 2017-05-10 04:30:00
Для получения текущих даты и времени можно вызвать метод now() :
from datetime import datetime now = datetime.now() print(now) # 2017-05-03 11:18:56.239443 print("<>.<>.<> <>:<>".format(now.day, now.month, now.year, now.hour, now.minute)) # 3.5.2017 11:21 print(now.date()) print(now.time())
С помощью свойств day, month, year, hour, minute, second можно получить отдельные значения даты и времени. А через методы date() и time() можно получить отдельно дату и время соответственно.
Преобразование из строки в дату
Из функциональности класса datetime следует отметить метод strptime() , который позволяет распарсить строку и преобразовать ее в дату. Этот метод принимает два параметра:
strptime(str, format)
Первый параметр str представляет строковое определение даты и времени, а второй параметр — формат, который определяет, как различные части даты и времени расположены в этой строке.
Для определения формата мы можем использовать следующие коды:
- %d : день месяца в виде числа
- %m : порядковый номер месяца
- %y : год в виде 2-х чисел
- %Y : год в виде 4-х чисел
- %H : час в 24-х часовом формате
- %M : минута
- %S : секунда
Применим различные форматы:
from datetime import datetime deadline = datetime.strptime("22/05/2017", "%d/%m/%Y") print(deadline) # 2017-05-22 00:00:00 deadline = datetime.strptime("22/05/2017 12:30", "%d/%m/%Y %H:%M") print(deadline) # 2017-05-22 12:30:00 deadline = datetime.strptime("05-22-2017 12:30", "%m-%d-%Y %H:%M") print(deadline) # 2017-05-22 12:30:00
Как в python превратить число секунд в дату и время?
Есть время, заданное в формате (секунды с 00:00:00 01.01.2010 UTC). как его превратить в удобный вид?
- Вопрос задан более трёх лет назад
- 7446 просмотров
1 комментарий
Простой 1 комментарий
Что такое удобный вид, конкретно?
Решения вопроса 0
Ответы на вопрос 2
Перед ответом смотрю наличие ✔ в ваших вопросах
import datetime MY_UTC_EPOCH_START = 1262304000 # 00:00:00 01.01.2010 UTC def my_utcfromtimestamp(ts): return datetime.datetime.utcfromtimestamp(ts + MY_UTC_EPOCH_START)
Функция работает полностью аналогично стандартной datetime.datetime.utcfromtimestamp , только лишь применяя поправку на начало вашей «UTC эпохи» (полночь 1 января 2010 по Гринвичу):
>>> my_utcfromtimestamp(1) datetime.datetime(2010, 1, 1, 0, 0, 1) >>> my_utcfromtimestamp(123) datetime.datetime(2010, 1, 1, 0, 2, 3) >>> my_utcfromtimestamp(3600) datetime.datetime(2010, 1, 1, 1, 0)
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Координатор племени фиолетовых обезьянок
from datetime import datetime ts = int("1284101485") print(datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))
Преобразовать числа в дату и время
Преобразовать строку в дату-время
Всем привет! Как преобразовать строку в дату-время, и обратно, с возможностью задать формат? .
Необходимо преобразовать дату и время — из файла *.prn
Есть файл *.prn с массивом данных: 2010.10.19 01:31,1.3,1.39,1.34,1.32 2010.10.19.
![]()
7279 / 4102 / 1794
Регистрация: 27.03.2020
Сообщений: 6,926
VistaSV30, хорошо бы сам фрейм или его часть.
530 / 308 / 76
Регистрация: 10.04.2012
Сообщений: 1,143
Записей в блоге: 2
Так я загружаю данные во фрейм
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
import pandas as pd import pyodbc as sqlMS # связь с Access # ------ указать свой путь к базе данных connStr = (r"DRIVER=;" r"DBQ=c:\Users\Arlen\Python\DB_DateTime.accdb;") conn = sqlMS.connect(connStr) # создать соединение с БД cursor = conn.cursor() strSQL = ''' SELECT tbl_DT.* FROM tbl_DT ''' df = pd.read_sql(strSQL, conn) cursor.close() del cursor conn.close() df
Файл с данными прилагается, только при загрузке нужно будет указать свой путь. Я еще не разобрался, как в таких случаях указывать относительный путь.
Вложения
| DB_DateTime.rar (15.8 Кб, 3 просмотров) |
![]()
7279 / 4102 / 1794
Регистрация: 27.03.2020
Сообщений: 6,926
VistaSV30, у меня проблемы с драйверами — потому и спрашивал про сам сгенерированный фрейм «df»
530 / 308 / 76
Регистрация: 10.04.2012
Сообщений: 1,143
Записей в блоге: 2
Формат CSV подойдет?
Вложения
| tbl_DT.rar (258 байт, 0 просмотров) |
530 / 308 / 76
Регистрация: 10.04.2012
Сообщений: 1,143
Записей в блоге: 2
Сейчас еще подождите, попробую сразу фрейм сделать
Добавлено через 11 минут
1 2 3 4 5 6 7 8 9 10 11 12 13
import pandas as pd import numpy as np import datetime as DT df = pd.DataFrame(np.zeros((25,3))) start_date, end_date = DT.datetime(2020, 1, 1), DT.datetime(2020, 1, 25) res = pd.date_range(min(start_date, end_date), max(start_date, end_date)).strftime('%d-%m-%Y').tolist() df[0] = res df[1] = np.random.randint(0, 23, 25) df[2] = np.random.randint(0, 59, 25) df
Добавлено через 5 минут
Мне теперь нужно в одной колонке собрать дату и время, в таком виде:
2020-01-15 23:45:00
И чтобы это был вычисляемый формат, что бы потом можно было по ним вычислять время
Добавлено через 9 минут
1 2 3 4 5 6 7 8 9 10 11 12
import pandas as pd import numpy as np import datetime as DT df = pd.DataFrame(np.zeros((25,3))) date1, date2 = DT.datetime(2020, 1, 1), DT.datetime(2020, 1, 25) df[0] = pd.date_range(date1, date2).strftime('%d-%m-%Y').tolist() df[1] = np.random.randint(0, 23, 25) df[2] = np.random.randint(0, 59, 25) df.columns = ['Data', 'Hour', 'Min'] print(df)
Добавлено через 2 часа 3 минуты
Загрузил данные из Access и вот так их конвертировал в формат Дата-Время, но по-моему, это должно делаться как-то по другому.
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 32 33
import pandas as pd import pyodbc as sqlMS # связь с Access import datetime as DT # ------ указать свой путь к базе данных connStr = (r"DRIVER=;" r"DBQ=c:\Users\Arlen\Python\DB_DateTime.accdb;") conn = sqlMS.connect(connStr) # создать соединение с БД cursor = conn.cursor() strSQL = ''' SELECT tbl_DT.* FROM tbl_DT ''' df = pd.read_sql(strSQL, conn) cursor.close() del cursor conn.close() df['F5'] = pd.to_datetime(df['F5']) df['DT'] = 0 df['F61'] = pd.to_numeric(df['F61'], downcast='integer') df['F62'] = pd.to_numeric(df['F62'], downcast='integer') for i in range(len(df['DT'])): df['DT'][i] = DT.datetime( year=df['F5'][i].year, month=df['F5'][i].month, day=df['F5'][i].day, hour= df['F61'][i], minute= df['F62'][i], second=0) df
преобразовать дату в число питон
Как и многие люди, я переключился с Matlab на Python . Matlab представляет каждую дату как число. ( Integers — дни с 00-00-0000 , а фракции — это время в день). Я считаю, что Python делает то же самое, за исключением другой даты начала 0-0-0001 Я играю с datetime , но can not, кажется, уходит от объектов datetime и timedeltas . Я уверен, что это мертво просто, но как я могу работать с обычными старыми числами (float)? возможно как немного контекста: i введите метку даты и времени и соедините их, чтобы сделать одно значение времени:
from datetime import datetime date_object1 = datetime.strptime(date[1][0] + ' ' + date[1][1], '%Y-%m-%d %H:%M:%S') date_object2 = datetime.strptime(date[2][0] + ' ' + date[2][1], '%Y-%m-%d %H:%M:%S')
reabow 05 янв. 2013, в 12:48
Поделиться
Я думаю, это зависит от того, какие операции с датами вы хотите сделать. Если вы привыкли выполнять математические операции, тогда подобные вещи не очень хорошо работают с датами . есть так много переменных, которые будут обрабатывать правильные объекты даты, поэтому, возможно, стоит сначала обдумать это. Просто мысль!
dmp 05 янв. 2013, в 11:40
спасибо NPE. Это похоже, за исключением того, что я хочу пойти другим путем (datetime, чтобы плавать)
reabow 05 янв. 2013, в 11:42
Дэнп, может быть, это путь. Я хотел перенести это в javascript, чтобы поиграть с d3.js. но, возможно, я слишком застрял в старых способах Matlab
