在DD / MM / YYYY和YYYY-MM-DD之间转换日期?

时间:2009-02-02 10:01:49

标签: python date

使用Python脚本,我需要读取一个CVS文件,其中日期格式为DD / MM / YYYY,并在将其保存到SQLite数据库之前将它们转换为YYYY-MM-DD。

这几乎可行,但失败了,因为我没有提供时间:

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

我假设datetime对象中有一个方法可以很容易地执行此转换,但我找不到如何执行此操作的示例。谢谢。

7 个答案:

答案 0 :(得分:53)

您的示例代码错误。这有效:

import datetime

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

对strptime()的调用根据第二个参数中指定的格式解析第一个参数,因此这两个参数需要匹配。然后,您可以调用strftime()将结果格式化为所需的最终格式。

答案 1 :(得分:13)

首先需要将字符串转换为datetime元组,然后将该datetime元组转换为字符串,它将如下所示:

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

答案 2 :(得分:4)

是否还有其他人认为将这些字符串转换为日期/时间对象是一种浪费,最终是一个简单的文本转换?如果您确定传入的日期有效,您可以使用:

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

这几乎肯定会比转换日期更快。

答案 3 :(得分:4)

我是编程新手。我希望从yyyy-mm-dd转换为dd/mm/yyyy,以我世界各地的人们使用和识别的格式打印出日期。

上面接受的答案让我走上正轨。

我最终解决的问题是:

import datetime

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

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

import语句后面的前两行以美国格式(2017-01-26)显示今天的日期。最后两行将其转换为英国和其他国家/地区(26/01/2017)认可的格式。

您可以缩短此代码,但我保留原样,因为它对初学者有帮助。我希望这有助于其他初学者程序员的开始!

答案 4 :(得分:2)

#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)

答案 5 :(得分:1)

如果需要转换整列数据(来自pandas DataFrame),然后首先使用to_datetime将其(pandas Series)转换为日期时间格式,最后使用.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)

样品用量:

import pandas as pd

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

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

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

答案 6 :(得分:0)

最简单的方法

在读取 csv 文件时,输入一个参数 parse_dates

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

这会将提到的列的日期转换为 YYYY-MM-DD 格式

相关问题