Input any time, output timezones that are currently that time
in_day = [weekday for weekday in weekdays if word in weekday]
    if len(in_day) == 1:

seems odd. You make the entire list, put it in memory, take its length and then throw it away. Consider instead
n_matching = sum(1 for weekday in weekdays if word in weekday)
if n_matching == 1:

This loop:
for word in words:
    in_day = [weekday for weekday in weekdays if word in weekday]
    if len(in_day) == 1: # Make sure that the word found is a weekday name, not just something like &quot;day&quot;
        weekday = in_day[0]
        break

can be simplified if you use set operations; lower everything in words before this:
countries = {t.split(&quot;/&quot;, 1)[0].lower() for t in pytz.all_timezones}
try:
    country = next(iter(countries &amp; set(words))).title()
except StopIteration:
    country = &quot;World&quot; # If no country name found, use &quot;World&quot;