Files
zkxw/backend/app/core/utils.py
T
2026-05-12 16:35:07 +08:00

57 lines
1.5 KiB
Python

"""统一工具函数"""
import uuid
import random
import string
from datetime import datetime
from typing import Optional
def generate_uuid() -> str:
"""生成UUID"""
return str(uuid.uuid4()).replace("-", "").upper()
def generate_id(prefix: str = "") -> str:
"""生成带前缀的ID"""
uid = str(uuid.uuid4()).replace("-", "").upper()
return f"{prefix}{uid}" if prefix else uid
def generate_random_password(length: int = 8) -> str:
"""生成随机密码"""
chars = string.ascii_letters + string.digits
return ''.join(random.choice(chars) for _ in range(length))
def get_current_time() -> datetime:
"""获取当前时间"""
return datetime.now()
def format_datetime(dt: Optional[datetime]) -> Optional[str]:
"""格式化时间为ISO 8601格式"""
if dt is None:
return None
return dt.strftime("%Y-%m-%d %H:%M:%S")
def parse_datetime(dt_str: str) -> Optional[datetime]:
"""解析ISO 8601格式时间"""
if not dt_str:
return None
try:
return datetime.fromisoformat(dt_str.replace("Z", "+00:00"))
except (ValueError, AttributeError):
return None
def get_file_size_display(size_bytes: int) -> str:
"""将字节数转换为可读的文件大小"""
if size_bytes is None:
return "0 B"
for unit in ['B', 'KB', 'MB', 'GB', 'TB']:
if size_bytes < 1024.0:
return f"{size_bytes:.2f} {unit}"
size_bytes /= 1024.0
return f"{size_bytes:.2f} PB"