Найти - Пользователи
Полная версия: вывод времени по-русски
Начало » Python для новичков » вывод времени по-русски
1
Striver
Здравствуйте!

Есть ли какая-нибудь библиотека, которой можно подать на вход объект datetime или timedelta, а на выходе получать строки такого вида:
"1 день 2 часа 15 минут“, ”28 минут 17 секунд“, ”53 секунды" и т.д.

Вроде понятно, как можно самому это сделать, но возня с падежами для разных числительных немного пугает, и если это уже где-то сделано, не хотелось бы велосипедить.

Striver
После некоторых размышлений понял, что при моих запросах никакая библиотека не поможет, и написал сам.
Выглядит страшновато, но сходу не знаю, как заменить эти бесконечные if'ы на что-то более изящное:
 def seconds_to_rus(seconds_in: float):
    GROUPS = {1:1, 2:2, 3:2, 4:2, 5:5, 6:5, 7:5, 8:5, 9:5, 0:5}
    HOURS = {1: "час", 2: "часа", 5: "часов"}
    MINUTES = {1: "минута", 2: "минуты", 5: "минут"}
    SECONDS = {1: "секунда", 2: "секунды", 5: "секунд"}
    if seconds_in < 0.1:
        return "0.1 секунды"
    if seconds_in < 1:
        return "%.1f секунды" % seconds_in
    if seconds_in < 1.1:
        return "1 секунда"
    if seconds_in < 2:
        return "%.1f секунды" % seconds_in
    if seconds_in < 2.1:
        return "2 секунды"
    if seconds_in < 3:
        return "%.1f секунды" % seconds_in
    seconds_in = int(round(seconds_in))
    seconds_1 = seconds_in % 10
    if seconds_in < 60: # 1 минута
        return "%d %s" % (seconds_in, SECONDS[GROUPS[seconds_1]])
    if seconds_in < 300: # 5 минут
        minutes_in = int(seconds_in / 60.0)
        minutes_1 = minutes_in % 10
        seconds_in %= 60
        if seconds_in:
            return "%d %s %d %s" % (minutes_in, MINUTES[GROUPS[minutes_1]], seconds_in, SECONDS[GROUPS[seconds_1]])
        else:
            return "%d %s" % (minutes_in, MINUTES[GROUPS[minutes_1]])
    minutes_in = int(round(seconds_in / 60.0))
    minutes_1 = minutes_in % 10
    if minutes_in < 60: # 1 час
        return "%d %s" % (minutes_in, MINUTES[GROUPS[minutes_1]])
    else:
        hours_in = int(minutes_in / 60.0)
        hours_1 = hours_in % 10
        minutes_in %= 60
        if minutes_in:
            return "%d %s %d %s" % (hours_in, HOURS[GROUPS[hours_1]], minutes_in, MINUTES[GROUPS[minutes_1]])
        else:
            return "%d %s" % (hours_in, HOURS[GROUPS[hours_1]])

py.user.next
Пример на C.
Пример на питоне.
Пример на питоне (демо).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB