fbpx

Сколько времени прошло

298 просмотра
0

Это не является копией предыдущего вопроса, но тот же самый функционал должен быть реализован на python… У меня есть готовый шаблон плазмоида. Я «спер» исходники одного таймера и поменял местами настоящее время и сохраненное. Получил почти ожидаемый результат — разницу между настоящим временем и записанным. Только меня не устраивает формат вывода. Выводит 400 days, 4:40:00, а мне нужно 1 years 01 months 05 days, 4:40:00

Вот те заветные строчки:

    n = datetime.now()
    timeDiff = n - self.end
    painter.drawText(rect, Qt.AlignHCenter | Qt.AlignVCenter, str(timeDiff).split(".")[0])

Все как бы понятно, только как изменить формат вывода. Прошу вас, великие python кодеры, напишите, пожалуйста, мне эти несколько жалких строчек решения этой задачи. Я с этим языком не знаком абсолютно и не хочу изучать его ради этой, простой для вас задачки. Заранее очень благодарен


Добавить комментарий

3 Answers

Python Опубликовано 19.01.2019
0

Хочу представить свой костыль. Люди-профессионалы, может есть выход проще и я зря корячился?
Скриншот

    n = datetime.now()
    timeDiff = datetime(2011, 1, 1, 0, 0) + relativedelta(n, self.end)
    year = timeDiff.year - 2011
    if year < 10:
     year = '0'+str(year)
 
    month = timeDiff.month - 1
    if month < 10:
     month = '0'+str(month)
 
    day = timeDiff.day - 1
    if day < 10:
     day = '0'+str(day)
 
    hour = timeDiff.hour
    if hour < 10:
     hour = '0'+str(hour)
 
    minute = timeDiff.minute
    if minute < 10:
     minute = '0'+str(minute)
 
    second = timeDiff.second
    if second < 10:
     second = '0'+str(second)
 
    stri = str(year)+'.'+str(month)+'.'+str(day)+'\n'+str(hour)+':'+str(minute)+':'+str(second)
    painter.drawText(rect, Qt.AlignHCenter | Qt.AlignVCenter, stri)

Работает, как нужно, но знаю, что есть выход проще

Добавить комментарий
0

Вот описание из стандартного питоновского мана: strftime() and strptime() Behavior

Добавить комментарий
0

Трудность заключается в точном подсчете числа лет, длина года меняется. Можно использовать, например, модуль dateutil:

>>> import datetime as dt
>>> from dateutil.relativedelta import relativedelta
>>> end = dt.datetime(2001,1,1)
>>> n = dt.datetime.now()
>>> relativedelta(n, end)
relativedelta(years=+12, months=+6, days=+21, hours=+16, minutes=+25, seconds=+50, microseconds=+812805)

А что касается вопроса ниже, можно использовать zfill, если очень охота форматировать самому: str(5).zfill(2) даст '05', а str(12).zfill(2) даст '12'. В приведенном примере это можно использовать так:

str(relativedelta(n,end).months).zfill(2)

Хотя я бы сохранил результат relativedelta(n, end) в отдельную переменную, и уже из нее дергал бы данные для форматирования, ибо незачем каждый раз вычислять их.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up