Search code examples
pythondatetimeiso8601

How to remove time from datetime.fromisoformat if not given?


What do I need to do to get the following responses for the different input strings?

date_str = "2020-01-01"
date_obj = datetime.fromisoformat(date_str)
# Output for date_obj: 2023-01-01

date_str = "2020-01-01T20"
date_obj = datetime.fromisoformat(date_str)
# Output for date_obj: 2023-01-01 20:00:00

date_str = "2020-01-01T00:00:00"
date_obj = datetime.fromisoformat(date_str)
# Output for date_obj: 2023-01-01 00:00:00

At the moment, I always get the time included in the DateTime object. When no time is set, then it will include 00:00:00.


Solution

  • using a try/except:

    from datetime import datetime, date
    
    for date_str in "2020-01-01", "2020-01-01T20", "2020-01-01T00:00:00":
        try:
            print("date -> ", date.fromisoformat(date_str))
        except ValueError:
            print("datetime --> ", datetime.fromisoformat(date_str))
            
    # date ->  2020-01-01
    # datetime -->  2020-01-01 20:00:00
    # datetime -->  2020-01-01 00:00:00
    
    

    or a check for the date/time separator:

    for date_str in "2020-01-01", "2020-01-01T20", "2020-01-01T00:00:00":
        if "T" in date_str or " " in date_str:
            print("datetime --> ", datetime.fromisoformat(date_str))
        else:
            print("date --> ", date.fromisoformat(date_str))
            
    # date -->  2020-01-01
    # datetime -->  2020-01-01 20:00:00
    # datetime -->  2020-01-01 00:00:00