Я фанат кодирования, чтобы позволить мне легко изменять вывод в будущем, поэтому я пришел к следующему:
convs = {'ye': 1, 'mo': 12, 'we': 52.1429, 'da': 365} # conversion rates to a year
conv_to = 'ye' # choose your desired unit!
times = {i: convs[conv_to] / float(convs[i]) for i in convs}
s = "1 year 1 month 1 week 1 day"
s = s.split(" ")
s = list(zip(s[0::2], s[1::2]))
converted_amt = sum([float(times[i[1].lower()[:2]]) * float(i[0]) for i in s])
print(converted_amt)
С этим вы можете легко добавить больше детализации для поддержки часов, минути многое другое.
Ввод:
conv_to = 'mo'
s = "23 years 2 months 3 weeks 24 days"
Выход: 279.4794514873339
Ввод:
conv_to = 'ye'
s = "8 years 9 months 0 weeks 3 day"
Вывод:
3196.75
Ввод (работает в любом порядке):
conv_to = 'da'
s = "2 days 1 week"
Выход:
8.999994246580073
Как видите, преобразование в дни, когда используются недели, будет не совсем точным, так как значение, которое я использую, - это среднее значение, найденное в Google.Округление должно помочь этому.