Главная страница

ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов


Скачать 7.92 Mb.
НазваниеНиколай Прохоренок Владимир Дронов
Дата05.05.2023
Размер7.92 Mb.
Формат файлаpdf
Имя файлаПрохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен.pdf
ТипДокументы
#1111379
страница18 из 83
1   ...   14   15   16   17   18   19   20   21   ...   83
Получить результат можно с помощью следующих атрибутов:
 year
— год (число в диапазоне от
MINYEAR
до
MAXYEAR
);
 month
— месяц (число от
1
до
12
);
 day
— день (число от
1
до количества дней в месяце).
Пример:
>>> d = datetime.date.today() # Текущая дата (21-11-2017)
>>> d.year, d.month, d.day
(2017, 11, 21)
Над экземплярами класса date можно производить следующие операции:
 date2 = date1 + timedelta
— прибавляет к дате указанный период в днях. Значения атрибутов timedelta.seconds и timedelta.microseconds игнорируются;
 date2 = date1 — timedelta
— вычитает из даты указанный период в днях. Значения атрибутов timedelta.seconds и timedelta.microseconds игнорируются;
 timedelta = date1 — date2
— возвращает разницу между датами (период в днях). Атри- буты timedelta.seconds и timedelta.microseconds будут иметь значение
0

Глава 10. Работа с датой и временем
193
Можно также сравнивать две даты с помощью операторов сравнения:
>>> d1 = datetime.date(2017, 11, 21)
>>> d2 = datetime.date(2017, 1, 1)
>>> t = datetime.timedelta(days=10)
>>> d1 + t, d1 - t # Прибавляем и вычитаем 10 дней
(datetime.date(2017, 12, 1), datetime.date(2017, 11, 11))
>>> d1 - d2 # Разница между датами datetime.timedelta(324)
>>> d1 < d2, d1 > d2, d1 <= d2, d1 >= d2
(False, True, False, True)
>>> d1 == d2, d1 != d2
(False, True)
Класс date поддерживает следующие методы:
 replace([year][, month][, day])
— возвращает дату с обновленными значениями. Зна- чения можно указывать через запятую в порядке следования параметров или присвоить значение названию параметра:
>>> d = datetime.date(2017, 11, 21)
>>> d.replace(2016, 12) # Заменяем год и месяц datetime.date(2016, 12, 21)
>>> d.replace(year=2017, month=1, day=31) datetime.date(2017, 1, 31)
>>> d.replace(day=30) # Заменяем только день datetime.date(2017, 1, 30)
 strftime(<Строка формата>)
— возвращает отформатированную строку. В строке фор- мата можно задавать комбинации специальных символов, которые используются в функции strftime()
из модуля time
:
>>> d = datetime.date(2017, 11, 21)
>>> d.strftime("%d.%m.%Y")
'21.11.2017'
 isoformat()
— возвращает дату в формате
ГГГГ-ММ-ДД
:
>>> d = datetime.date(2017, 11, 21)
>>> d.isoformat()
'2017-11-21'
 ctime()
— возвращает строку формата "%a %b %d %H:%M:%S %Y"
:
>>> d = datetime.date(2017, 11, 21)
>>> d.ctime()
'Tue Nov 21 00:00:00 2017'
 timetuple()
— возвращает объект struct_time с датой и временем:
>>> d = datetime.date(2017, 11, 21)
>>> d.timetuple() time.struct_time(tm_year=2017, tm_mon=11, tm_mday=21, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=325, tm_isdst=-1)
 toordinal()
— возвращает количество дней, прошедших с 1-го года:
>>> d = datetime.date(2017, 11, 21)
>>> d.toordinal()
736654

194
Часть I. Основы языка Python
>>> datetime.date.fromordinal(736654) datetime.date(2017, 11, 21)
 weekday()
— возвращает порядковый номер дня в неделе (
0
— для понедельника,
6
— для воскресенья):
>>> d = datetime.date(2017, 11, 21)
>>> d.weekday() # 1 — это вторник
1
 isoweekday()
— возвращает порядковый номер дня в неделе (
1
— для понедельника,
7
— для воскресенья):
>>> d = datetime.date(2017, 11, 21)
>>> d.isoweekday() # 2 — это вторник
2
 isocalendar()
— возвращает кортеж из трех элементов (год, номер недели в году и по- рядковый номер дня в неделе):
>>> d = datetime.date(2017, 11, 21)
>>> d.isocalendar()
(2017, 47, 2)
Наконец, имеется поддержка следующих атрибутов класса:
 min
— минимально возможное значение даты;
 max
— максимально возможное значение даты;
 resolution
— минимальное возможное различие между значениями даты.
Выведем значения этих атрибутов:
>>> datetime.date.min datetime.date(1, 1, 1)
>>> datetime.date.max datetime.date(9999, 12, 31)
>>> datetime.date.resolution datetime.timedelta(1)
10.4.3. Класс time
Класс time из модуля datetime позволяет выполнять операции над значениями времени.
Конструктор класса имеет следующий формат: time([hour][, minute][, second][, microsecond][, tzinfo], [fold])
Все параметры не являются обязательными. Значения можно указывать через запятую в порядке следования параметров или присвоить значение названию параметра. В парамет- рах можно указать следующий диапазон значений:
 hour
— часы (число от
0
до
23
);
 minute
— минуты (число от
0
до
59
);
 second
— секунды (число от
0
до
59
);
 microsecond
— микросекунды (число от
0
до
999999
);
 tzinfo
— зона (экземпляр класса tzinfo или значение
None
);

Глава 10. Работа с датой и временем
195
 fold
— порядковый номер отметки времени. Значение
0
(используется по умолчанию) обозначает первую отметку, значение
1
— вторую. Введено в Python 3.6 для тех случаев, когда в данной временной зоне практикуется перевод часов с зимнего на летнее время и обратно, в результате чего часы могут дважды в сутки показывать одинаковое время.
Если значения выходят за диапазон, возбуждается исключение
ValueError
:
>>> import datetime
>>> datetime.time(23, 12, 38, 375000) datetime.time(23, 12, 38, 375000)
>>> t = datetime.time(hour=23, second=38, minute=12)
>>> repr(t), str(t)
('datetime.time(23, 12, 38)', '23:12:38')
>>> datetime.time(25, 12, 38, 375000)
... Фрагмент опущен ...
ValueError: hour must be in 0..23
Получить результат можно с помощью следующих атрибутов:
 hour
— часы (число от
0
до
23
);
 minute
— минуты (число от
0
до
59
);
 second
— секунды (число от
0
до
59
);
 microsecond
— микросекунды (число от
0
до
999999
);
 tzinfo
— зона (экземпляр класса tzinfo или значение
None
);
 fold
— порядковый номер отметки времени (число
0
или
1
). Поддержка этого атрибута появилась в Python 3.6.
Пример:
>>> t = datetime.time(23, 12, 38, 375000)
>>> t.hour, t.minute, t.second, t.microsecond
(23, 12, 38, 375000)
Над экземплярами класса time нельзя выполнять арифметические операции. Можно только производить сравнения:
>>> t1 = datetime.time(23, 12, 38, 375000)
>>> t2 = datetime.time(12, 28, 17)
>>> t1 < t2, t1 > t2, t1 <= t2, t1 >= t2
(False, True, False, True)
>>> t1 == t2, t1 != t2
(False, True)
Класс time поддерживает следующие методы:
 replace([hour][, minute][, second][, microsecond][, tzinfo])
— возвращает время с обновленными значениями. Значения можно указывать через запятую в порядке сле- дования параметров или присвоить значение названию параметра:
>>> t = datetime.time(23, 12, 38, 375000)
>>> t.replace(10, 52) # Заменяем часы и минуты datetime.time(10, 52, 38, 375000)
>>> t.replace(second=21) # Заменяем только секунды datetime.time(23, 12, 21, 375000)

196
Часть I. Основы языка Python
 isoformat()
— возвращает время в формате ISO 8601:
>>> t = datetime.time(23, 12, 38, 375000)
>>> t.isoformat()
'23:12:38.375000'
 strftime(<Строка формата>)
— возвращает отформатированную строку. В строке фор- мата можно указывать комбинации специальных символов, которые используются в функции strftime()
из модуля time
:
>>> t = datetime.time(23, 12, 38, 375000)
>>> t.strftime("%H:%M:%S")
'23:12:38'
Дополнительно класс time поддерживает такие атрибуты:
 min
— минимально возможное значение времени;
 max
максимально возможное значение времени;
 resolution
— минимальное возможное различие между значениями времени.
Вот значения этих атрибутов:
>>> datetime.time.min datetime.time(0, 0)
>>> datetime.time.max datetime.time(23, 59, 59, 999999)
>>> datetime.time.resolution datetime.timedelta(0, 0, 1)
П
РИМЕЧАНИЕ
Класс time поддерживает также методы dst(), utcoffset() и tzname(). За подробной информацией по этим методам, а также по абстрактному классу tzinfo обращайтесь к до- кументации по модулю datetime.
10.4.4. Класс datetime
Класс datetime из модуля datetime позволяет выполнять операции над комбинацией даты и времени. Конструктор класса имеет следующий формат: datetime(<Год>, <Месяц>, <День>[, hour][, minute][, second]
[, microsecond][, tzinfo][, fold])
Первые три параметра являются обязательными. Остальные значения можно указывать через запятую в порядке следования параметров или присвоить значение названию пара- метра. В параметрах можно указать следующий диапазон значений:

<Год>
— в виде числа, расположенного в диапазоне между значениями, хранящимися в константах
MINYEAR
(
1
) и
MAXYEAR
(
9999
);

<Месяц>
— число от
1
до
12
включительно;

<День>
— число от
1
до количества дней в месяце;
 hour
— часы (число от
0
до
23
);
 minute
— минуты (число от
0
до
59
);
 second
— секунды (число от
0
до
59
);

Глава 10. Работа с датой и временем
197
 microsecond
— микросекунды (число от
0
до
999999
);
 tzinfo
— зона (экземпляр класса tzinfo или значение
None
);
 fold
— порядковый номер отметки времени. Значение
0
(используется по умолчанию) обозначает первую отметку, значение
1
— вторую. Введено в Python 3.6 для тех случаев, когда в данной временной зоне практикуется перевод часов с зимнего на летнее время и обратно, в результате чего часы могут дважды в сутки показывать одинаковое время.
Если значения выходят за диапазон, возбуждается исключение
ValueError
:
>>> import datetime
>>> datetime.datetime(2017, 11, 21) datetime.datetime(2017, 11, 21, 0, 0)
>>> datetime.datetime(2017, 11, 21, hour=17, minute=47) datetime.datetime(2017, 11, 21, 17, 47)
>>> datetime.datetime(2017, 32, 20)
... Фрагмент опущен ...
ValueError: month must be in 1..12
>>> d = datetime.datetime(2017, 11, 21, 17, 47, 43)
>>> repr(d), str(d)
('datetime.datetime(2017, 11, 21, 17, 47, 43)', '2017-11-21 17:47:43')
Для создания экземпляра класса datetime также можно воспользоваться следующими мето- дами:
 today()
— возвращает текущие дату и время:
>>> datetime.datetime.today() datetime.datetime(2017, 11, 21, 17, 48, 27, 932332)
 now([<Зона>])
— возвращает текущие дату и время. Если параметр не задан, то метод аналогичен методу today()
:
>>> datetime.datetime.now() datetime.datetime(2017, 11, 21, 17, 48, 51, 703618)
 utcnow()
— возвращает текущее универсальное время (UTC):
>>> datetime.datetime.utcnow() datetime.datetime(2017, 11, 21, 14, 49, 4, 497928)
 fromtimestamp(<Количество секунд>[, <Зона>])
— возвращает дату, соответствующую количеству секунд, прошедших с начала эпохи:
>>> import datetime, time
>>> datetime.datetime.fromtimestamp(time.time()) datetime.datetime(2017, 11, 21, 17, 49, 27, 394796)
>>> datetime.datetime.fromtimestamp(1511273856.0) datetime.datetime(2017, 11, 21, 17, 17, 36)
 utcfromtimestamp(<Количество секунд>)
— возвращает дату, соответствующую количе- ству секунд, прошедших с начала эпохи, в универсальном времени (UTC):
>>> datetime.datetime.utcfromtimestamp(time.time()) datetime.datetime(2017, 11, 21, 14, 50, 10, 596706)
>>> datetime.datetime.utcfromtimestamp(1511273856.0) datetime.datetime(2017, 11, 21, 14, 17, 36)

198
Часть I. Основы языка Python
 fromordinal(<Количество дней с 1-го года>)
— возвращает дату, соответствующую количеству дней, прошедших с 1-го года. В качестве параметра указывается число от
1
до datetime.datetime.max.toordinal()
:
>>> datetime.datetime.max.toordinal()
3652059
>>> datetime.datetime.fromordinal(3652059) datetime.datetime(9999, 12, 31, 0, 0)
>>> datetime.datetime.fromordinal(1) datetime.datetime(1, 1, 1, 0, 0)
 combine(<Экземпляр класса date>, <Экземпляр класса time>)
— возвращает экземпляр класса datetime
, созданный на основе переданных ему экземпляров классов date и time
:
>>> d = datetime.date(2017, 11, 21) # Экземпляр класса date
>>> t = datetime.time(17, 51, 22) # Экземпляр класса time
>>> datetime.datetime.combine(d, t) datetime.datetime(2017, 11, 21, 17, 51, 22)
 strptime(<Строка с датой>, <Строка формата>)
— разбирает строку, указанную в пер- вом параметре, в соответствии со строкой формата, создает на основе полученных из разобранной строки данных экземпляр класса datetime и возвращает его. Если строка не соответствует формату, возбуждается исключение
ValueError
. Метод учитывает теку- щую локаль:
>>> datetime.datetime.strptime("21.11.2017", "%d.%m.%Y") datetime.datetime(2017, 11, 21, 0, 0)
>>> datetime.datetime.strptime("21.11.2017", "%d-%m-%Y")
... Фрагмент опущен ...
ValueError: time data '21.11.2017' does not match format '%d-%m-%Y'
Получить результат можно с помощью следующих атрибутов:
 year
— год (число в диапазоне от
MINYEAR
до
MAXYEAR
);
 month
— месяц (число от
1
до
12
);
 day
— день (число от
1
до количества дней в месяце);
 hour
— часы (число от
0
до
23
);
 minute
— минуты (число от
0
до
59
);
 second
— секунды (число от
0
до
59
);
 microsecond
— микросекунды (число от
0
до
999999
);
 tzinfo
— зона (экземпляр класса tzinfo или значение
None
).
 fold
— порядковый номер отметки времени (число
0
или
1
). Поддержка этого атрибута появилась в Python 3.6.
Примеры:
>>> d = datetime.datetime(2017, 11, 21, 17, 53, 58)
>>> d.year, d.month, d.day
(2017, 11, 21)
>>> d.hour, d.minute, d.second, d.microsecond
(17, 53, 58, 0)

Глава 10. Работа с датой и временем
199
Над экземплярами класса datetime можно производить следующие операции:
 datetime2 = datetime1 + timedelta
— прибавляет к дате указанный период;
 datetime2 = datetime1 — timedelta
вычитает из даты указанный период;
 timedelta = datetime1 — datetime2
— возвращает разницу между датами.
Можно также сравнивать две даты с помощью операторов сравнения.
Примеры:
>>> d1 = datetime.datetime(2017, 11, 21, 17, 54, 8)
>>> d2 = datetime.datetime(2017, 11, 1, 12, 31, 4)
>>> t = datetime.timedelta(days=10, minutes=10)
>>> d1 + t # Прибавляем 10 дней и 10 минут datetime.datetime(2017, 12, 1, 18, 4, 8)
>>> d1 - t # Вычитаем 10 дней и 10 минут datetime.datetime(2017, 11, 11, 17, 44, 8)
>>> d1 - d2 # Разница между датами datetime.timedelta(20, 19384)
>>> d1 < d2, d1 > d2, d1 <= d2, d1 >= d2
(False, True, False, True)
>>> d1 == d2, d1 != d2
(False, True)
Класс datetime поддерживает следующие методы:
 date()
— возвращает экземпляр класса date
, хранящий дату:
>>> d = datetime.datetime(2017, 11, 21, 17, 56, 41)
>>> d.date() datetime.date(2017, 11, 21)
 time()
— возвращает экземпляр класса time
, хранящий время:
>>> d = datetime.datetime(2017, 11, 21, 17, 56, 41)
>>> d.time() datetime.time(17, 56, 41)
 timetz()
— возвращает экземпляр класса time
, хранящий время. Метод учитывает пара- метр tzinfo
;
 timestamp()
— возвращает вещественное число, представляющее количество секунд, прошедшее с начала эпохи (обычно с 1 января 1970 г.):
>>> d = datetime.datetime(2017, 11, 21, 17, 56, 41)
>>> d.timestamp()
1511276201.0
 replace([year][, month][, day][, hour][, minute][, second][, microsecond][, tzinfo])
— возвращает дату с обновленными значениями. Значения можно указывать через запятую в порядке следования параметров или присвоить значение названию па- раметра:
>>> d = datetime.datetime(2017, 11, 21, 17, 56, 41)
>>> d.replace(2016, 12) datetime.datetime(2016, 12, 21, 17, 56, 41)
>>> d.replace(hour=12, month=10) datetime.datetime(2016, 10, 21, 12, 56, 41)

200
Часть I. Основы языка Python
 timetuple()
— возвращает объект struct_time с датой и временем:
>>> d = datetime.datetime(2017, 11, 21, 17, 56, 41)
>>> d.timetuple() time.struct_time(tm_year=2017, tm_mon=11, tm_mday=21, tm_hour=17, tm_min=56, tm_sec=41, tm_wday=1, tm_yday=325, tm_isdst=-1)
 utctimetuple()
— возвращает объект struct_time с датой в универсальном времени
(UTC):
>>> d = datetime.datetime(2017, 11, 21, 17, 56, 41)
>>> d.utctimetuple() time.struct_time(tm_year=2017, tm_mon=11, tm_mday=21, tm_hour=17, tm_min=56, tm_sec=41, tm_wday=1, tm_yday=325, tm_isdst=0)
 toordinal()
— возвращает количество дней, прошедшее с 1-го года:
>>> d = datetime.datetime(2017, 11, 21, 17, 56, 41)
>>> d.toordinal()
736654
 weekday()
— возвращает порядковый номер дня в неделе (
0
— для понедельника,
6
— для воскресенья):
>>> d = datetime.datetime(2017, 11, 21, 17, 56, 41)
>>> d.weekday() # 1 — это вторник
1
 isoweekday()
— возвращает порядковый номер дня в неделе (
1
— для понедельника,
7
— для воскресенья):
>>> d = datetime.datetime(2017, 11, 21, 17, 56, 41)
>>> d.isoweekday() # 2 — это вторник
2
 isocalendar()
— возвращает кортеж из трех элементов (год, номер недели в году и по- рядковый номер дня в неделе):
>>> d = datetime.datetime(2017, 11, 21, 17, 56, 41)
>>> d.isocalendar()
(2017, 47, 2)
 isoformat([<Разделитель даты и времени>])
— возвращает дату в формате ISO 8601.
Если разделитель не указан, используется буква
T
:
>>> d = datetime.datetime(2017, 11, 21, 17, 56, 41)
>>> d.isoformat() # Разделитель не указан '2017-11-21T17:56:41'
1   ...   14   15   16   17   18   19   20   21   ...   83


написать администратору сайта