tww/tz.py
2019-03-13 15:21:33 -07:00

44 lines
1.4 KiB
Python

import argparse
import dateparser
from pytz.exceptions import UnknownTimeZoneError
parser = argparse.ArgumentParser()
parser.add_argument('human_dt', help="datetime-like string")
parser.add_argument('human_tz', nargs='?', help="timezone-like or location string")
parser.add_argument('--format', dest='format', default='%Y-%m-%d %H:%M:%S%z')
args = parser.parse_args()
human_dt = args.human_dt
human_tz = args.human_tz
try:
# first try parsing the timezone from user input
if human_tz:
result = dateparser.parse(human_dt, settings={'TO_TIMEZONE': human_tz})
else:
result = dateparser.parse(human_dt)
except UnknownTimeZoneError:
# we don't know this timezone one, assume location
import random
import string
from geopy.geocoders import Nominatim
from timezonefinder import TimezoneFinder
user_agent = ''.join(random.choices(string.ascii_uppercase + string.digits, k=20))
geolocator = Nominatim(user_agent=user_agent)
location = geolocator.geocode(human_tz)
tzf = TimezoneFinder()
loc_tz = tzf.timezone_at(lng=location.longitude, lat=location.latitude)
result = dateparser.parse(human_dt, settings={'TO_TIMEZONE': loc_tz})
if result is None:
print("Could not parse '{human_dt}' or '{human_tz}'".format(human_dt, human_tz))
exit(1)
formatted_result = result.strftime(args.format)
print(formatted_result)