81 lines
2.0 KiB
Python
81 lines
2.0 KiB
Python
from datetime import datetime, timezone
|
|
from typing import Optional, Dict, Union
|
|
from sqlalchemy.orm import Session
|
|
from sqlalchemy import func
|
|
from models.server_time import ServerTime
|
|
|
|
def get_current_utc_time() -> datetime:
|
|
"""
|
|
Get current UTC timestamp.
|
|
|
|
Returns:
|
|
datetime: Current UTC datetime
|
|
"""
|
|
return datetime.now(timezone.utc)
|
|
|
|
def validate_timestamp(timestamp: datetime) -> bool:
|
|
"""
|
|
Validate if timestamp is a valid datetime and not in future.
|
|
|
|
Args:
|
|
timestamp: Datetime to validate
|
|
|
|
Returns:
|
|
bool: True if valid, False otherwise
|
|
"""
|
|
current_time = get_current_utc_time()
|
|
return timestamp <= current_time
|
|
|
|
def record_server_time(db: Session) -> ServerTime:
|
|
"""
|
|
Record current server time in database.
|
|
|
|
Args:
|
|
db: Database session
|
|
|
|
Returns:
|
|
ServerTime: Recorded server time entry
|
|
"""
|
|
server_time = ServerTime(server_time=func.now())
|
|
db.add(server_time)
|
|
db.commit()
|
|
db.refresh(server_time)
|
|
return server_time
|
|
|
|
def get_latest_server_time(db: Session) -> Optional[ServerTime]:
|
|
"""
|
|
Get most recent server time record.
|
|
|
|
Args:
|
|
db: Database session
|
|
|
|
Returns:
|
|
Optional[ServerTime]: Latest server time record if exists
|
|
"""
|
|
return db.query(ServerTime).order_by(ServerTime.server_time.desc()).first()
|
|
|
|
def get_time_difference(time1: datetime, time2: datetime) -> float:
|
|
"""
|
|
Calculate time difference in seconds between two timestamps.
|
|
|
|
Args:
|
|
time1: First timestamp
|
|
time2: Second timestamp
|
|
|
|
Returns:
|
|
float: Time difference in seconds
|
|
"""
|
|
return abs((time1 - time2).total_seconds())
|
|
|
|
def format_server_time(server_time: datetime, format: str = "%Y-%m-%d %H:%M:%S") -> str:
|
|
"""
|
|
Format server time to string representation.
|
|
|
|
Args:
|
|
server_time: Datetime to format
|
|
format: Output format string
|
|
|
|
Returns:
|
|
str: Formatted datetime string
|
|
"""
|
|
return server_time.strftime(format) |