Этот вопрос относится к модулю datetime Python - PullRequest
0 голосов
/ 20 февраля 2020

Я написал функцию Python, которая печатает количество дней, оставшихся до дня рождения пользователя, значение которого вводится пользователем. Код выглядит следующим образом:

"""
Created on Thu Feb 20 16:01:33 2020
@author: hussain.ali

"""
    import datetime as dt
    import pytz
    def days_to_birthday():
        a = (input('Enter your birthday in YYYY, MM, DD format with the year being the current year:'))
        td = dt.datetime.today()
        #td2= td.replace(hour=0, minute =0, second =0, microsecond =0)
        birthday = dt.datetime.strptime(a, '%Y,%m,%d')
        days_to_birthday = birthday - td
        print("There are", days_to_birthday, ' remaining until your next birthday!')

    days_to_birthday()

Этот скрипт или код работает хорошо, за исключением того, что он дает количество дней плюс часы, а также минуты, секунды и даже микросекунды, оставшиеся до следующего дня рождения.

Вывод выглядит следующим образом:

Enter your birthday in YYYY, MM, DD format with the year being the current year:2020,3,7
There are 15 days, 6:11:07.020133  remaining until your next birthday!

Я хочу, чтобы в выводе отображались только оставшиеся дни ИЛИ вывод: До вашего следующего дня рождения осталось 15 дней, 6 часов, 11 минут, 07 секунд и 020133 микросекунд!

Что нужно сделать, чтобы получить желаемый результат? Пожалуйста, сообщите.

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

timedelta не имеет strftime() для форматирования, так что вы можете сделать одну из двух вещей:

  1. получить total_seconds() и рассчитать все значения, используя divmod() или используя // и %

    total = days_to_birthday.seconds
    rest, seconds = divmod(total, 60)
    hours, minutes = divmod(rest, 60)
    
    days = days_to_birthday.days
    microseconds = days_to_birthday.microseconds
    
    print('{} days {:02} hrs {:02} mins {:02} secs {:06} microseconds'.format(days, hours, minutes, seconds, microseconds))
    
  2. получить строку 15 days, 6:11:07.020133, разделить ее и использовать части для создания новой строки

    days = days_to_birthday.days
    parts = str(days_to_birthday).split(', ')[1].replace('.', ':').split(':')
    
    print('{} days {} hrs {} mins {} secs {} microseconds'.format(days, *parts))
    

import datetime as dt
import pytz

#a = input('Enter your birthday in YYYY,MM,DD format with the year being the current year:')
a = '2020,06,01'
print('date:', a)
td = dt.datetime.today()

birthday = dt.datetime.strptime(a, '%Y,%m,%d')
days_to_birthday = birthday - td

print(days_to_birthday)

total = days_to_birthday.seconds
rest, seconds = divmod(total, 60)
hours, minutes = divmod(rest, 60)

days = days_to_birthday.days
microseconds = days_to_birthday.microseconds

print('{} days {:02} hrs {:02} mins {:02} secs {:06} microseconds'.format(days, hours, minutes, seconds, microseconds))

days = days_to_birthday.days
parts = str(days_to_birthday).split(', ')[1].replace('.', ':').split(':')

print('{} days {} hrs {} mins {} secs {} microseconds'.format(days, *parts))

Результат

date: 2020,06,01
93 days, 21:35:15.056351
93 days 21 hrs 35 mins 15 secs 056351 microseconds
93 days 21 hrs 35 mins 15 secs 056351 microseconds
1 голос
/ 20 февраля 2020

измените ваше заявление на печать на этот код ниже.

print("There are", days_to_birthday.days, 'days remaining until your next birthday!')
...