#!/usr/bin/env python3 import argparse import datetime import pytz from typing import List def list_timezones() -> List[str]: return pytz.all_timezones def get_timezone_offset(tz: str) -> str: try: tz_obj = pytz.timezone(tz) offset = tz_obj.utcoffset(datetime.datetime.now()) return f"{tz}: {offset}" except pytz.UnknownTimeZoneError: return f"Unknown timezone: {tz}" def convert_timezones(source_tz: str, target_tz: str, time: str) -> str: try: source_tz_obj = pytz.timezone(source_tz) target_tz_obj = pytz.timezone(target_tz) time_obj = datetime.datetime.strptime(time, "%Y-%m-%d %H:%M") time_obj = source_tz_obj.localize(time_obj) converted_time = time_obj.astimezone(target_tz_obj) return f"{time} ({source_tz}) -> {converted_time.strftime('%Y-%m-%d %H:%M')} ({target_tz})" except (pytz.UnknownTimeZoneError, ValueError): return "Invalid input" def schedule_meeting(timezones: List[str], time: str) -> str: try: time_obj = datetime.datetime.strptime(time, "%Y-%m-%d %H:%M") result = [] for tz in timezones: tz_obj = pytz.timezone(tz) localized_time = tz_obj.localize(time_obj) result.append(f"{tz}: {localized_time.strftime('%Y-%m-%d %H:%M')}") return "\n".join(result) except ValueError: return "Invalid time format" def main() -> None: parser = argparse.ArgumentParser(description="Chronozone: Time zone converter and scheduler") subparsers = parser.add_subparsers(dest="command") list_parser = subparsers.add_parser("list", help="List all timezones") list_parser.add_argument("-a", "--all", action="store_true", help="Show all timezones") offset_parser = subparsers.add_parser("offset", help="Get timezone offset") offset_parser.add_argument("timezone", help="Timezone name") convert_parser = subparsers.add_parser("convert", help="Convert time between timezones") convert_parser.add_argument("source_tz", help="Source timezone name") convert_parser.add_argument("target_tz", help="Target timezone name") convert_parser.add_argument("time", help="Time in YYYY-MM-DD HH:MM format") schedule_parser = subparsers.add_parser("schedule", help="Schedule a meeting across timezones") schedule_parser.add_argument("timezones", nargs="+", help="List of timezone names") schedule_parser.add_argument("time", help="Time in YYYY-MM-DD HH:MM format") args = parser.parse_args() if args.command == "list": if args.all: print("\n".join(list_timezones())) else: print("Use -a or --all to show all timezones") elif args.command == "offset": print(get_timezone_offset(args.timezone)) elif args.command == "convert": print(convert_timezones(args.source_tz, args.target_tz, args.time)) elif args.command == "schedule": print(schedule_meeting(args.timezones, args.time)) else: parser.print_help() if __name__ == "__main__": main()