Для универсального преобразования дат в Python можно использовать модуль datetime в связке с библиотекой pytz для часовых поясов и locale для локализации.  Функция должна принимать дату (datetime object), желаемый формат (строку), часовой пояс (строку) и локаль (строку) в качестве аргументов.
import datetime
import pytz
import locale
def format_date(date_obj, format_str, timezone_str, locale_str):
    """Преобразует дату в указанный формат с учетом часового пояса и локали."""
    try:
        locale.setlocale(locale.LC_ALL, locale_str)
    except locale.Error:
        print(f"Ошибка: Локаль {locale_str} не поддерживается. Используется локаль по умолчанию.")
    timezone = pytz.timezone(timezone_str)
    localized_date = timezone.localize(date_obj) if date_obj.tzinfo is None else date_obj.astimezone(timezone)
    return localized_date.strftime(format_str)
  Пример использования:
date = datetime.datetime(2023, 10, 27, 10, 0, 0)
formatted_date = format_date(date, "%d %B %Y, %H:%M", "Europe/Moscow", "ru_RU.UTF-8")
print(formatted_date) # Вывод: 27 октября 2023, 10:00
formatted_date_us = format_date(date, "%m/%d/%Y %I:%M %p", "America/Los_Angeles", "en_US.UTF-8")
print(formatted_date_us) # Вывод (приблизительно): 10/26/2023 12:00 AM (зависит от текущего времени)
  Ключевые моменты:
datetime:  Представление даты и времени.pytz: Обработка часовых поясов.locale: Форматирование даты в соответствии с локалью.  Важно обрабатывать locale.Error.strftime:  Форматирует дату в строку в соответствии с указанным форматом.Для создания универсальной функции преобразования дат в разные форматы с учетом локализации и часовых поясов в Python, можно использовать комбинацию библиотек datetime, pytz и babel.
Вот пример кода:
import datetime
import pytz
from babel.dates import format_datetime
def format_date_universal(date_obj, format_string, timezone_str, locale_str):
    """
    Преобразует объект datetime в строку с заданным форматом, часовым поясом и локалью.
    Args:
        date_obj: Объект datetime, который нужно преобразовать.
        format_string: Строка формата, например, "yyyy-MM-dd HH:mm:ss". Поддерживаются форматы Babel.
        timezone_str: Строка часового пояса, например, "Europe/Moscow".
        locale_str: Строка локали, например, "ru_RU".
    Returns:
        Строка с отформатированной датой и временем.
        Возвращает None в случае ошибки.
    """
    try:
        # 1. Приведение к UTC (если дата еще не в UTC)
        if date_obj.tzinfo is None or date_obj.tzinfo.utcoffset(date_obj) is None:
             date_obj = pytz.utc.localize(date_obj) # Предполагаем, что дата в UTC, если нет информации о часовом поясе. Если это не так, лучше указать исходный часовой пояс.
        else:
            date_obj = date_obj.astimezone(pytz.utc)
        # 2. Преобразование в целевой часовой пояс
        timezone = pytz.timezone(timezone_str)
        date_obj_localized = date_obj.astimezone(timezone)
        # 3. Форматирование с учетом локали
        formatted_date = format_datetime(date_obj_localized, format=format_string, locale=locale_str)
        return formatted_date
    except pytz.exceptions.UnknownTimeZoneError:
        print(f"Ошибка: Неизвестный часовой пояс: {timezone_str}")
        return None
    except ValueError:
        print(f"Ошибка: Некорректная дата или формат.")
        return None
    except Exception as e:
        print(f"Ошибка: {e}")
        return None
Пример использования:
# Пример использования
date = datetime.datetime(2023, 10, 27, 10, 30, 0) # Дата без информации о часовом поясе (naive datetime object)
format_string = "dd MMMM yyyy, HH:mm:ss"
timezone_str = "Europe/Moscow"
locale_str = "ru_RU"
formatted_date = format_date_universal(date, format_string, timezone_str, locale_str)
if formatted_date:
    print(f"Отформатированная дата: {formatted_date}")
# Пример с датой, уже имеющей информацию о часовом поясе
date_with_tz = datetime.datetime(2023, 10, 27, 10, 30, 0, tzinfo=pytz.utc)
formatted_date_with_tz = format_date_universal(date_with_tz, format_string, timezone_str, locale_str)
if formatted_date_with_tz:
    print(f"Отформатированная дата (с tzinfo): {formatted_date_with_tz}")
Описание работы функции:
datetime, строку формата, строку часового пояса и строку локали.datetime не содержит информации о часовом поясе (tzinfo is None), предполагается, что он находится в UTC, и он локализуется как UTC.  Если у объекта есть tzinfo, он преобразуется в UTC.  Это критически важно для правильного преобразования в целевой часовой пояс.pytz для преобразования даты и времени в указанный часовой пояс.babel для форматирования даты и времени в соответствии с указанной локалью.None в случае ошибки.Замечания:
pytz и babel:  pip install pytz babelЭта функция предоставляет гибкий и универсальный способ преобразования дат и времени в различные форматы с учетом локализации и часовых поясов.