git/aika/main
py/arvelie.py
57 lines2 KB last change raw · history
#!/usr/bin/env python3

import sys
import argparse
from datetime import datetime

def to_arvelie(year_full, doy):
    y = year_full % 100
    letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    if doy == 365:
        return f"{y:02d}+00"
    elif doy == 366:
        return f"{y:02d}+01"
    else:
        m_index = (doy - 1) // 14
        dom = (doy - 1) % 14 + 1
        return f"{y:02d}{letters[m_index]}{dom:02d}"

def main():
    parser = argparse.ArgumentParser(
        description="Convert the current date, or a specified date, to Arvelie format.",
        epilog="Examples:\n"
               "  %(prog)s             # Print current Arvelie date\n"
               "  %(prog)s 2021-01-08  # Convert January 8, 2021 to Arvelie",
        formatter_class=argparse.RawDescriptionHelpFormatter
    )

    parser.add_argument("-v", "--version", action="version", version="Arvelie 1.0.0")
    
    parser.add_argument(
        "date", 
        metavar="DATE", 
        nargs="?", 
        help="convert a specific date (formats: YYYY-MM-DD, YYYYMMDD)\n"
             "If omitted, prints the current local date."
    )
    
    args = parser.parse_args()

    if args.date:
        try:
            if "-" in args.date:
                dt = datetime.strptime(args.date, "%Y-%m-%d")
            else:
                dt = datetime.strptime(args.date, "%Y%m%d")
        except ValueError:
            sys.stderr.write("Error: Invalid date format. Use YYYY-MM-DD.\n")
            sys.exit(1)
    else:
        dt = datetime.now()

    print(to_arvelie(dt.year, dt.timetuple().tm_yday))

if __name__ == "__main__":
    main()