63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
"""
|
|||
|
|
测试宝箱倒计时计算逻辑
|
|||
|
|
"""
|
|||
|
|
import sys
|
|||
|
|
import os
|
|||
|
|
from datetime import datetime, timedelta
|
|||
|
|
|
|||
|
|
# 添加项目路径
|
|||
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'backend'))
|
|||
|
|
|
|||
|
|
from backend.app.models.game import Chest
|
|||
|
|
from backend.app.models.game import ChestStatus
|
|||
|
|
|
|||
|
|
def test_time_calculation():
|
|||
|
|
"""测试时间计算逻辑"""
|
|||
|
|
print("=== 宝箱倒计时计算测试 ===")
|
|||
|
|
|
|||
|
|
# 创建一个测试宝箱
|
|||
|
|
chest = Chest()
|
|||
|
|
chest.id = 1
|
|||
|
|
chest.status = ChestStatus.BETTING
|
|||
|
|
chest.countdown_seconds = 300 # 5分钟
|
|||
|
|
|
|||
|
|
# 模拟创建时间为5秒前
|
|||
|
|
chest.created_at = datetime.utcnow() - timedelta(seconds=5)
|
|||
|
|
|
|||
|
|
print(f"宝箱ID: {chest.id}")
|
|||
|
|
print(f"创建时间: {chest.created_at}")
|
|||
|
|
print(f"倒计时设置: {chest.countdown_seconds}秒")
|
|||
|
|
print(f"当前UTC时间: {datetime.utcnow()}")
|
|||
|
|
|
|||
|
|
# 模拟后端计算逻辑
|
|||
|
|
if isinstance(chest.created_at, str):
|
|||
|
|
# 处理ISO格式字符串,假设存储的是UTC时间
|
|||
|
|
if 'T' in chest.created_at:
|
|||
|
|
created_time = datetime.fromisoformat(chest.created_at.replace('Z', '+00:00')).replace(tzinfo=None)
|
|||
|
|
else:
|
|||
|
|
# 处理MySQL datetime格式 (YYYY-MM-DD HH:MM:SS)
|
|||
|
|
created_time = datetime.strptime(chest.created_at, '%Y-%m-%d %H:%M:%S')
|
|||
|
|
else:
|
|||
|
|
# 如果是从数据库获取的datetime对象,确保转换为naive datetime
|
|||
|
|
created_time = chest.created_at.replace(tzinfo=None) if chest.created_at.tzinfo else chest.created_at
|
|||
|
|
|
|||
|
|
# 使用UTC时间进行计算
|
|||
|
|
now = datetime.utcnow()
|
|||
|
|
elapsed = (now - created_time).total_seconds()
|
|||
|
|
time_remaining = max(0, int(chest.countdown_seconds - elapsed))
|
|||
|
|
|
|||
|
|
print(f"已过去时间: {elapsed:.2f}秒")
|
|||
|
|
print(f"剩余时间: {time_remaining}秒")
|
|||
|
|
print(f"格式化显示: {format_time(time_remaining)}")
|
|||
|
|
|
|||
|
|
return time_remaining
|
|||
|
|
|
|||
|
|
def format_time(seconds):
|
|||
|
|
"""格式化时间显示"""
|
|||
|
|
mins = seconds // 60
|
|||
|
|
secs = seconds % 60
|
|||
|
|
return f"{int(mins):02d}:{int(secs):02d}"
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
test_time_calculation()
|