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

29 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
Run Code Online (Sandbox Code Playgroud)

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

unw*_*ind 57

你的示例代码是错误的.这有效:

import datetime

datetime.datetime.strptime("21/12/2008", "%d/%m/%Y").strftime("%Y-%m-%d")
Run Code Online (Sandbox Code Playgroud)

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


Sil*_*ost 14

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

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


Mar*_*ark 10

我是编程新手。我想将 from 转换为yyyy-mm-dddd/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)
Run Code Online (Sandbox Code Playgroud)

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

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


pax*_*blo 6

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

>>> ddmmyyyy = "21/12/2008"
>>> yyyymmdd = ddmmyyyy[6:] + "-" + ddmmyyyy[3:5] + "-" + ddmmyyyy[:2]
>>> yyyymmdd
'2008-12-21'
Run Code Online (Sandbox Code Playgroud)

几乎可以肯定,这将比日期转换更快。

  • 如果您担心转换日期的速度,那么您显然无须担心。unwind发布的代码比您的代码更加清晰和可维护。这应该是您的主要关注点,而不是速度。 (13认同)

mir*_*phd 5

如果需要转换整个列(从pandas DataFrame),请首先将其 ( pandas Series) 转换为datetime使用的格式to_datetime,然后使用.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

Run Code Online (Sandbox Code Playgroud)
使用示例:
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

Run Code Online (Sandbox Code Playgroud)