/
github_better
/
GenAI
Обзор
Документация
Войти
/
github_better
/
GenAI
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Game_time.py
105 строк
4 KB
github_better
New
22 дек 2025, 08:52
22 дек 2025, 08:52
b68d8c4
Код
Авторство
О чём код?
import logging import calendar from datetime import datetime, timedelta from Lib.Translate_text import translate_text from Lib.Debugger import debug_print logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def sum_time(current_time: str, add_min: int) -> str: debug_print(logger) # Валидация формата if not current_time or not isinstance(current_time, str): raise ValueError(f"Invalid time: current_time is None or not a string") parts = current_time.split(':') if len(parts) != 5: raise ValueError(f"Invalid time format: {current_time}, expected YEAR:MONTH:DAY:HOUR:MINUTE") try: year, month, day, hour, minute = map(int, parts) except ValueError as e: raise ValueError(f"Invalid time format: {current_time}, all values must be integers: {e}") # ✅ Поддержка отрицательных годов (до н.э.) # Конвертируем в "минуты от базовой эпохи" и обратно # Пока работаем только с положительными годами (от 1 до ~4000) # или выбросим на будущее if year < 1: # Fallback: переводим в условный положительный год # Например, -500 превращаем в 5000 (базовый год + 5500) working_year = year + 10000 else: working_year = year try: # Используем условный год для datetime dt = datetime(working_year, month, day, hour, minute) new_dt = dt + timedelta(minutes=add_min) # Преобразуем обратно result_year = new_dt.year if year < 1: result_year = result_year - 10000 # Восстанавливаем отрицательный год return f"{result_year}:{new_dt.month}:{new_dt.day}:{new_dt.hour}:{new_dt.minute}" except ValueError as e: raise ValueError(f"Error processing time: {e}") def pretty_time_format(time_str: str, lang: str) -> str: debug_print(logger) """ Форматирует время в многострочный читаемый формат с переводом. :param time_str: время в формате YEAR:MONTH:DAY:HOUR:MINUTE :param lang: язык для локализации :return: отформатированная строка времени """ parts = time_str.split(":") if len(parts) != 5: return translate_text("Invalid time format", "en", lang) year, month_num, day, hour, minute = parts # Обработка отрицательного года: выводим BC (не переводим) year_display = year try: y = int(year) if y < 0: year_display = f"{abs(y)} BC" else: year_display = str(y) except Exception: # Если год не парсится как int — оставляем как есть year_display = year # Преобразуем номер месяца в название на английском + переводим try: month_name = translate_text(calendar.month_name[int(month_num)], "en", lang) except (ValueError, IndexError): month_name = month_num # если не удалось преобразовать, оставляем как есть labels = { "year": translate_text("Year", "en", lang), "month": translate_text("Month", "en", lang), "day": translate_text("Day", "en", lang), "hour": translate_text("Hour", "en", lang), "minute": translate_text("Minute", "en", lang), } return ( f"{labels['year']}: {year_display}\n" f"{labels['month']}: {month_name}\n" f"{labels['day']}: {day}\n" f"{labels['hour']}: {hour}\n" f"{labels['minute']}: {minute}" )