{"id":1061,"date":"2023-01-01T11:57:59","date_gmt":"2023-01-01T11:57:59","guid":{"rendered":"https:\/\/ml-gis-service.com\/?p=1061"},"modified":"2023-01-01T11:58:00","modified_gmt":"2023-01-01T11:58:00","slug":"toolbox-compare-dates-as-string-in-python","status":"publish","type":"post","link":"https:\/\/ml-gis-service.com\/index.php\/2023\/01\/01\/toolbox-compare-dates-as-string-in-python\/","title":{"rendered":"Toolbox: Compare dates as string in Python"},"content":{"rendered":"\n<p>Have you encountered a situation when you must compare two dates written as strings? For example:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\"2022-01-01\" &lt; \"2022-01-02\"<\/pre>\n\n\n\n<p>This is a common problem with web and mobile app development, where dates are stored as strings. The best example of this behavior is Amazon&#8217;s <strong>DynamoDB<\/strong>. How to compare dates as strings? It can be done with a relatively simple function:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from datetime import datetime\n\n\ndef compare_str_dates(past_time: str, future_time: str, length=10, format='%Y-%m-%d') -> bool:\n    \"\"\"\n    Function compares two dates written as strings.\n\n    Parameters\n    ----------\n    past_time : str\n        An expected past date as a string.\n\n    future_time : str\n        An expected future date as a string.\n\n    length : int, default=10\n        The length of a string with date characters.\n\n    format : str, default='%Y-%m-%d'\n        The format of a date.\n\n    Returns\n    -------\n    : bool\n        ``True`` if the future date is in future in comparison to the past date.\n    \"\"\"\n    past_time = past_time[:length]\n    future_time = future_time[:length]\n    past = datetime.strptime(past_time, format)\n    future = datetime.strptime(future_time, format)\n\n    if future > past:\n        return True\n    return False<\/pre>\n\n\n\n<p>An example:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">PAST = \"2022-01-01\"\nFUTURE = \"2022-01-02 22:01:00\"\n\ncomparison = compare_str_dates(PAST, FUTURE)\nprint(comparison)\n<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">>> True<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>How to compare dates as strings in Python<\/p>\n","protected":false},"author":1,"featured_media":1063,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,17,180,31],"tags":[234,211,236,7,235],"class_list":["post-1061","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-engineering","category-scripts","category-time-series","category-tutorials","tag-compare-dates","tag-date","tag-dynamodb","tag-python","tag-string"],"_links":{"self":[{"href":"https:\/\/ml-gis-service.com\/index.php\/wp-json\/wp\/v2\/posts\/1061","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ml-gis-service.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ml-gis-service.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ml-gis-service.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ml-gis-service.com\/index.php\/wp-json\/wp\/v2\/comments?post=1061"}],"version-history":[{"count":2,"href":"https:\/\/ml-gis-service.com\/index.php\/wp-json\/wp\/v2\/posts\/1061\/revisions"}],"predecessor-version":[{"id":1064,"href":"https:\/\/ml-gis-service.com\/index.php\/wp-json\/wp\/v2\/posts\/1061\/revisions\/1064"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ml-gis-service.com\/index.php\/wp-json\/wp\/v2\/media\/1063"}],"wp:attachment":[{"href":"https:\/\/ml-gis-service.com\/index.php\/wp-json\/wp\/v2\/media?parent=1061"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ml-gis-service.com\/index.php\/wp-json\/wp\/v2\/categories?post=1061"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ml-gis-service.com\/index.php\/wp-json\/wp\/v2\/tags?post=1061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}