ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов
Скачать 7.92 Mb.
|
Получить результат можно с помощью следующих атрибутов: 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' |