"""Date and time utilities for API analysis.""" from datetime import datetime, timedelta, timezone def get_date_range(days: int) -> tuple[str, str]: """Calculate date range from current time. Args: days: Number of days to go back from now Returns: Tuple of (starting_at, ending_at) in ISO 8601 format """ ending_at_dt = datetime.now(timezone.utc) starting_at_dt = ending_at_dt - timedelta(days=days) starting_at = starting_at_dt.isoformat().replace('+00:00', 'Z') ending_at = ending_at_dt.isoformat().replace('+00:00', 'Z') return starting_at, ending_at def normalize_time_period(timestamp: str, grouping: str) -> str: """Normalize timestamp to time period string. Args: timestamp: ISO 8601 timestamp grouping: Time grouping ('day' or 'month') Returns: Normalized time period string (e.g., '2025-10-10' or '2025-10') """ if not timestamp: return 'unknown' try: dt = datetime.fromisoformat(timestamp.replace('Z', '+00:00')) if grouping == 'day': return dt.strftime('%Y-%m-%d') elif grouping == 'month': return dt.strftime('%Y-%m') else: return 'total' except Exception: return 'unknown'