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() |