import calendar
from datetime import datetime


def 取月份天数(时间字符串: str | None = None) -> int | None:
    """返回指定日期所在月份一共有多少天。

    功能说明:
        - 这个函数用于查看某个月份一共有多少天。
        - 支持传入日期，也支持传入完整时间。
        - 不传参数时，默认查看当前月份。
        - 输入格式不正确时，函数返回 ``None``。

    Args:
        时间字符串: ``YYYY-MM-DD`` 或 ``YYYY-MM-DD HH:MM:SS`` 格式的日期时间字符串。

    Returns:
        成功时返回月份天数；失败时返回 ``None``。
    """
    try:
        if 时间字符串 is None:
            年份 = datetime.now().year
            月份 = datetime.now().month
        else:
            时间字符串 = 时间字符串.strip()
            if len(时间字符串) == 10:
                时间对象 = datetime.strptime(时间字符串, "%Y-%m-%d")
            else:
                时间对象 = datetime.strptime(时间字符串, "%Y-%m-%d %H:%M:%S")
            年份 = 时间对象.year
            月份 = 时间对象.month
        return calendar.monthrange(年份, 月份)[1]
    except Exception:
        return None


if __name__ == "__main__":
    print("===== 示例1：查看 2026-03 所在月份天数 =====")
    print("结果:", 取月份天数("2026-03-20"))

    print("\n===== 示例2：查看闰年 2 月天数 =====")
    print("结果:", 取月份天数("2024-02-20"))

    print("\n===== 示例3：传入完整时间 =====")
    print("结果:", 取月份天数("2026-04-15 10:00:00"))

    print("\n===== 示例4：不传参数，查看当前月份天数 =====")
    print("结果:", 取月份天数())

    print("\n===== 示例5：输入错误格式 =====")
    print("结果:", 取月份天数("2026/03/20"))

    print("\n===== 示例6：应用场景-判断本月是否需要排 31 天班表 =====")
    print("结果:", 取月份天数("2026-07-01"))
