Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 15.02.2020
Сообщений: 25

Модуль datetime

12.06.2020, 12:48. Показов 5052. Ответов 4

Студворк — интернет-сервис помощи студентам
Здравствуйте, прошу помощи с заданием, в котором идет работа с модулем datetime.
Задание: Для класса Человек определите метод, позволяющий по дате рождения вычислить возраст (сколько полных лет). Для класса Сотрудник определите метод, позволяющий по дате приема на работу вычислить стаж. В стаже нужно выдавать количество лет, месяцев, дней. Например, 11 лет 2 мес 3 дня.
Вот что у меня получилось, но, как видно, я не поняла как использовать метод. Можно ли вообще со строковыми значениями проводить арифметические операции? Если да, то как?
Python
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import datetime
 
class Human():
    first_name = None
    last_name = None
    patronymic = None
    date = None
 
    def __init__(self, first_name, last_name, patronymic, date):
        self.first_name = first_name
        self.last_name = last_name
        self.patronymic = patronymic
        self.date = date
 
    def describe_human(self):
        print(self.first_name + ' ' + self.last_name + ' ' + self.patronymic + ' ' + str(self.date))
 
    def age_human(self):              """Метод вычисления возраста по дате рождения"""
    age = datetime.date.today() - datetime.strptime("20-02-1999")
    print(age.years)
        
        
humanOne = Human('Billy', 'Gibson', 'Hill', '20-02-1999')
humanTwo = Human('Stella', 'MacCol', 'Denny', '30-12-1995')
humanThree = Human('Kortney', 'MacCol', 'Denny', '15-09-1998')
 
humanOne.describe_human()
humanTwo.describe_human()
humanThree.describe_human()
humanOne.age_human()
 
class Employee(Human):
    def __init__(self, first_name, last_name, patronymic, date, place_work, job, eployment_date):
        super().__init__(first_name, last_name, patronymic, date)
        self.place_work = place_work
        self.job = job
        self.eployment_date = eployment_date
 
    def describe_human(self):
        print(self.first_name + ' ' + self.last_name + ' ' + self.patronymic + ' ' + str(self.date) + ' ' + self.place_work + ' ' + self.job + ' ' + str(self.eployment_date))
 
    def age_employee(self):
        print()
 
employeeOne = Employee('Jason', 'Jones', 'Hue', '23-10-1994', 'Rachel`s store', 'seller', '15-04-2009')
employeeTwo = Employee('Alan', 'Smith', 'Sam', '03-03-1997', 'car interior "Sakura"', 'consultant', '27-08-2015')
employeeThree = Employee('Summer', 'Walker', 'Jerry', '16-10-1998', 'company "DevCenter"', 'manager', '19-10-2012')
 
employeeOne.describe_human()
employeeTwo.describe_human()
employeeThree.describe_human()
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.06.2020, 12:48
Ответы с готовыми решениями:

Создавал класс с datetime, и питон жалуется что этот модуль не найден
import Datetime class knigi(): y1=datetime.datetime.today() def __init__(self, kniga, name, god): ...

Переменная <class 'datetime.datetime'>
здравствуйте как её объявить? по аналогии как объявить строковую html_end: str = &quot;&quot; ?? спс

Из строки в datetime
Здравствуйте! Возникла ошибка, при преобразовании строки datetime.strptime(...) ValueError: time data '2005:08:23 15:10:16' does...

4
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
12.06.2020, 13:19
Лучший ответ Сообщение было отмечено KProgramGirl как решение

Решение

Python
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
34
35
36
37
38
39
40
41
42
43
class Human:
    def __init__(self, first_name, last_name, patronymic, date):
        self.first_name = first_name
        self.last_name = last_name
        self.patronymic = patronymic
        self.date = datetime.date(
            *reversed([int(item) for item in date.split('-')]))
 
    def describe_human(self):
        print(f"{self.first_name} {self.last_name} {self.patronymic} "
              f"{self.date.strftime('%d-%m-%Y')}")
 
    def age_human(self):
        """Метод вычисления возраста по дате рождения"""
        print((datetime.date.today() - self.date).days // 365)
 
 
class Employee(Human):
    def __init__(self, first_name, last_name, patronymic, date, place_work,
                 job, eployment_date):
        super().__init__(first_name, last_name, patronymic, date)
        self.place_work = place_work
        self.job = job
        self.eployment_date = datetime.date(
            *reversed([int(item) for item in eployment_date.split('-')]))
 
    def describe_human(self):
        print(f"{self.first_name} {self.last_name} {self.patronymic} "
              f"{self.date.strftime('%d-%m-%Y')} {self.place_work} {self.job} "
              f"{self.eployment_date.strftime('%d-%m-%Y')}")
 
    def age_employee(self):
        print((datetime.date.today() - self.eployment_date).days // 365)
 
 
humanOne = Human('Billy', 'Gibson', 'Hill', '20-02-1999')
humanOne.describe_human()
humanOne.age_human()
 
employeeOne = Employee('Jason', 'Jones', 'Hue', '23-10-1994', 'Rachel`s store',
                       'seller', '15-04-2009')
employeeOne.describe_human()
employeeOne.age_employee()
Добавлено через 8 минут
Цитата Сообщение от KProgramGirl Посмотреть сообщение
Можно ли вообще со строковыми значениями проводить арифметические операции?
А как вы вообще себе это представляете? Конечно нет. Но можно строку перевести в необходимый тип данных.
К примеру, объект дата создаётся так:
Python
1
2
3
import datetime
 
new_date = datetime.date(2020, 06, 12)
В вашем случает строку "12-06-2020" надо разделить по символам "-", перевести каждый кусочек в тип int и перевернуть, чтобы порядок был (год, месяц, число). Что я и сделал в методе __init__. Теперь у вас self.date - это не строка, а объект дата, а значит его уже можно вычитать из datetime.date.today(), чтобы получить временной промежуток.
1
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
12.06.2020, 13:46
В вашем случает строку "12-06-2020" надо разделить по символам "-",

А лучше воспользоваться имеющимся методом

Python
1
2
3
4
5
6
from datetime import datetime
 
d = '2020-06-01'
date_in_datetime = datetime.strptime(d, '%Y-%m-%d').date()
 
print(date_in_datetime)
1
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
12.06.2020, 13:56
Цитата Сообщение от volkomorov Посмотреть сообщение
А лучше воспользоваться имеющимся методом
Действительно. Можно и так. Спасибо.

KProgramGirl, вообще вы можете заменить только этот метод и у вас всё будет работать.
Python
1
2
3
4
5
    def age_human(self):
        """Метод вычисления возраста по дате рождения"""
        age = datetime.datetime.today() -\
              datetime.datetime.strptime(self.date, "%d-%m-%Y")
        print(age.days // 365)
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
12.06.2020, 14:24
Python
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
from datetime import datetime
from dataclasses import dataclass
 
@dataclass 
class Human:
    first_name: str
    last_name: str
    patronymic: str
    date: datetime
 
    def __post_init__(self):
        self.date = datetime.strptime(self.date, '%d-%m-%Y')
 
    def __str__(self):
        return self.first_name + ' ' + self.last_name + ' ' + self.patronymic + ' ' \
            + datetime.strftime(self.date, '%d-%m-%Y')
 
    @property
    def age(self):
        """Метод вычисления возраста по дате рождения"""
        return (datetime.now() - self.date).days / 365.25
        
        
humanOne = Human('Billy', 'Gibson', 'Hill', '20-02-1999')
humanTwo = Human('Stella', 'MacCol', 'Denny', '30-12-1995')
humanThree = Human('Kortney', 'MacCol', 'Denny', '15-09-1998')
 
print(humanOne)
print(humanOne.age)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.06.2020, 14:24
Помогаю со студенческими работами здесь

Задача на Datetime
Уважаемые киберфорумчане! Помогите пожалуйста с задачей! Я пытался сделать её без DateTime, вот в чём была задумка: вводим строку и...

Классы Date и DateTime
Создал два класса Date (хранит дату) и DateTime (Хранит Дату + Время) class Date: def __init__(self, year, month, day): ...

datetime, работа с датами
В библиотеке переучет каждый третий четверг месяца. Напишите функцию output(date), которая по заданной дате date (тип datetime.date)...

Прибавка месяца в datetime
Имеется код from datetime import datetime, timedelta time = datetime.strftime(datetime.now(), &quot;%Y.%m.%d&quot;) futureTime =...

Python не воспринимает библиотеку datetime)
Я написал календарь, но python не видит библиотеку datetime(она установлена) и выводит ошибку пр компиляции в IDLE python 3.x import...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru