【问题标题】:Converting date between DD/MM/YYYY and YYYY-MM-DD?在 DD/MM/YYYY 和 YYYY-MM-DD 之间转换日期?
【发布时间】:2010-10-04 21:38:30
【问题描述】:

使用 Python 脚本,我需要读取日期格式为 DD/MM/YYYY 的 CVS 文件,并将其转换为 YYYY-MM-DD,然后再将其保存到 SQLite 数据库中。

这几乎可行,但由于我没有提供时间而失败:

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 对象中有一个方法可以非常轻松地执行此转换,但我找不到如何执行此操作的示例。谢谢。

【问题讨论】:

    标签: python date


    【解决方案1】:

    您首先需要将字符串转换为日期时间元组,然后将该日期时间元组转换为字符串,如下所示:

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

    【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 可以在pandas中实现吗?
    【解决方案3】:

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

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

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

    【讨论】:

    • 如果您担心转换为日期的速度,那么您显然没有什么可担心的了。 unwind 发布的代码比你的更清晰和可维护。这应该是您最关心的问题,而不是速度。
    • 如果您像我一样循环超过 200,000 条记录,那么性能很重要。
    【解决方案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)
    

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

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

    【讨论】:

    • 您好,欢迎来到 StackOverflow。您的回答与问题无关,即从DD/MM/YYYYYYYY-MM-DD 的转换。您的帖子可能会被删除,但我鼓励您在网站上保持活跃。谢谢!
    • @lrnzcig 谢谢你的评论。我明白你的意思了。也许我应该发布我的问题并让别人回答 - 到目前为止我有很多问题,但我已经设法通过在网上和我可信赖的 Python 书中找到答案
    【解决方案5】:

    如果需要转换一整列(从pandasDataFrame),首先使用to_datetime将它(pandasSeries)转换为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
    
    
    示例用法:
    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
    
    

    【讨论】:

      【解决方案6】:
      #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)
      

      【讨论】:

        【解决方案7】:

        最简单的方法

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

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

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

        【讨论】:

          【解决方案8】:

          根据您的问题将日期格式 DD/MM/YYYY 转换为 YYYY-MM-DD,您可以使用这个:

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

          【讨论】:

            【解决方案9】:
            • df 是你的数据框
            • Dateclm 是您要更改的列

            此列应为DateTime 数据类型。

            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)
            

            【讨论】:

            • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
            猜你喜欢
            • 2023-03-27
            • 1970-01-01
            • 2013-10-19
            • 2023-03-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-21
            • 1970-01-01
            相关资源
            最近更新 更多