Converting date between DD/MM/YYYY and YYYY-MM-DD?

PythonDate

Python Problem Overview


Using a Python script, I need to read a CVS file where dates are formated as DD/MM/YYYY, and convert them to YYYY-MM-DD before saving this into a SQLite database.

This almost works, but fails because I don't provide time:

from datetime import datetime

lastconnection = datetime.strptime("21/12/2008", "%Y-%m-%d")

#ValueError: time data did not match format:  data=21/12/2008  fmt=%Y-%m-%d
print lastconnection

I assume there's a method in the datetime object to perform this conversion very easily, but I can't find an example of how to do it. Thank you.

Python Solutions


Solution 1 - Python

Your example code is wrong. This works:

import datetime

datetime.datetime.strptime("21/12/2008", "%d/%m/%Y").strftime("%Y-%m-%d")

The call to strptime() parses the first argument according to the format specified in the second, so those two need to match. Then you can call strftime() to format the result into the desired final format.

Solution 2 - Python

you first would need to convert string into datetime tuple, and then convert that datetime tuple to string, it would go like this:

lastconnection = datetime.strptime("21/12/2008", "%d/%m/%Y").strftime('%Y-%m-%d')

Solution 3 - Python

I am new to programming. I wanted to convert from yyyy-mm-dd to dd/mm/yyyy to print out a date in the format that people in my part of the world use and recognise.

The accepted answer above got me on the right track.

The answer I ended up with to my problem is:

import datetime

today_date = datetime.date.today()
print(today_date)

new_today_date = today_date.strftime("%d/%m/%Y")
print (new_today_date)

The first two lines after the import statement gives today's date in the USA format (2017-01-26). The last two lines convert this to the format recognised in the UK and other countries (26/01/2017).

You can shorten this code, but I left it as is because it is helpful to me as a beginner. I hope this helps other beginner programmers starting out!

Solution 4 - Python

Does anyone else else think it's a waste to convert these strings to date/time objects for what is, in the end, a simple text transformation? If you're certain the incoming dates will be valid, you can just use:

>>> ddmmyyyy = "21/12/2008"
>>> yyyymmdd = ddmmyyyy[6:] + "-" + ddmmyyyy[3:5] + "-" + ddmmyyyy[:2]
>>> yyyymmdd
'2008-12-21'

This will almost certainly be faster than the conversion to and from a date.

Solution 5 - Python

If you need to convert an entire column (from pandas DataFrame), first convert it (pandas Series) to the datetime format using to_datetime and then use .dt.strftime:

def conv_dates_series(df, col, old_date_format, new_date_format):

    df[col] = pd.to_datetime(df[col], format=old_date_format).dt.strftime(new_date_format)
    
    return df

Sample usage:
import pandas as pd

test_df = pd.DataFrame({"Dates": ["1900-01-01", "1999-12-31"]})

old_date_format='%Y-%m-%d'
new_date_format='%d/%m/%Y'

conv_dates_series(test_df, "Dates", old_date_format, new_date_format)

 	Dates
0 	01/01/1900
1 	31/12/1999

Solution 6 - Python

#case_date= 03/31/2020   

#Above is the value stored in case_date in format(mm/dd/yyyy )

demo=case_date.split("/")
new_case_date = demo[1]+"-"+demo[0]+"-"+demo[2]
#new format of date is (dd/mm/yyyy) test by printing it 
print(new_case_date)

Solution 7 - Python

The most simplest way

While reading the csv file, put an argument parse_dates

df = pd.read_csv("sample.csv", parse_dates=['column_name'])

This will convert the dates of mentioned column to YYYY-MM-DD format

Solution 8 - Python

Convert date format DD/MM/YYYY to YYYY-MM-DD according to your question, you can use this:

from datetime import datetime
lastconnection = datetime.strptime("21/12/2008", "%d/%m/%Y").strftime("%Y-%m-%d")
print(lastconnection)

Solution 9 - Python

  • df is your data frame
  • Dateclm is the column that you want to change

This column should be in DateTime datatype.

df['Dateclm'] = pd.to_datetime(df['Dateclm'])

df.dtypes


#Here is the solution to change the format of the column

df["Dateclm"] = pd.to_datetime(df["Dateclm"]).dt.strftime('%Y-%m-%d')

print(df)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOverTheRainbowView Question on Stackoverflow
Solution 1 - PythonunwindView Answer on Stackoverflow
Solution 2 - PythonSilentGhostView Answer on Stackoverflow
Solution 3 - PythonMarkView Answer on Stackoverflow
Solution 4 - PythonpaxdiabloView Answer on Stackoverflow
Solution 5 - PythonmirekphdView Answer on Stackoverflow
Solution 6 - PythonDishant RautView Answer on Stackoverflow
Solution 7 - Pythonvarun kumar nyalapelliView Answer on Stackoverflow
Solution 8 - PythonRokiDGuptaView Answer on Stackoverflow
Solution 9 - PythonThiyagarajah RajithaView Answer on Stackoverflow