def extract_datetime(text, anchorDate=None, lang=None, default_time=None): """ Extracts date and time information from a sentence. Parses many of the common ways that humans express dates and times, including relative dates like "5 days from today", "tomorrow', and "Tuesday". Vague terminology are given arbitrary values, like: - morning = 8 AM - afternoon = 3 PM - evening = 7 PM If a time isn't supplied or implied, the function defaults to 12 AM Args: text (str): the text to be interpreted anchorDate (:obj:`datetime`, optional): the date to be used for relative dating (for example, what does "tomorrow" mean?). Defaults to the current local date/time. lang (str): the BCP-47 code for the language to use, None uses default default_time (datetime.time): time to use if none was found in the input string. Returns: [:obj:`datetime`, :obj:`str`]: 'datetime' is the extracted date as a datetime object in the user's local timezone. 'leftover_string' is the original phrase with all date and time related keywords stripped out. See examples for further clarification Returns 'None' if no date or time related text is found. Examples: >>> extract_datetime( ... "What is the weather like the day after tomorrow?", ... datetime(2017, 06, 30, 00, 00) ... ) [datetime.datetime(2017, 7, 2, 0, 0), 'what is weather like'] >>> extract_datetime( ... "Set up an appointment 2 weeks from Sunday at 5 pm", ... datetime(2016, 02, 19, 00, 00) ... ) [datetime.datetime(2016, 3, 6, 17, 0), 'set up appointment'] >>> extract_datetime( ... "Set up an appointment", ... datetime(2016, 02, 19, 00, 00) ... ) None """ lang_code = get_primary_lang_code(lang) if not anchorDate: anchorDate = now_local() if lang_code == "en": return extract_datetime_en(text, anchorDate, default_time) elif lang_code == "es": return extract_datetime_es(text, anchorDate, default_time) elif lang_code == "pt": return extract_datetime_pt(text, anchorDate, default_time) elif lang_code == "it": return extract_datetime_it(text, anchorDate, default_time) elif lang_code == "fr": return extract_datetime_fr(text, anchorDate, default_time) elif lang_code == "sv": return extract_datetime_sv(text, anchorDate, default_time) elif lang_code == "de": return extract_datetime_de(text, anchorDate, default_time) elif lang_code == "da": return extract_datetime_da(text, anchorDate, default_time) # TODO: extract_datetime for other languages _log_unsupported_language(lang_code, ['en', 'es', 'pt', 'it', 'fr', 'sv', 'de', 'da']) return text