【问题标题】:convert a string of numbers to a datetime object [duplicate]将一串数字转换为日期时间对象[重复]
【发布时间】:2015-08-12 13:10:23
【问题描述】:

我正在解析一个 .csv 文件,其中包含财务日期时间格式 yyyymmdd 的日期列,当将一些行写入不同的文件时,我需要删除周末。

我知道使用datetime.weekdays() 然后:

if some_datetime_object.datetime.weekday() != 6 or 1:
    f.write(some_row)

但是,我如何将从 csv 解析的字符串转换为 datetime 对象以允许使用 weekday() 函数。

【问题讨论】:

  • if some_datetime_object.datetime.weekday() != 6 or 1 没有做你认为的事情

标签: python datetime weekday


【解决方案1】:

你可以使用datetime.datetime.strptime:

import datetime
#example date strings
date1 = "20120423"
date2 = "2015-04-23"

datetime_object_1 = datetime.datetime.strptime(date1, '%Y%m%d')
datetime.datetime(2012, 4, 23, 0, 0)

datetime_object_2 = datetime.datetime.strptime(date1, '%Y-%m-%d')
datetime.datetime(2012, 4, 23, 0, 0)

查看page 的底部以查看此函数格式化程序的所有可能指令。您可以使用strptime 方法解析几乎任何带有日期/时间数据的字符串。

【讨论】:

    【解决方案2】:

    您可以使用strptime 转换为日期时间对象。从这里,您可以使用weekdays 方法。

    但是,如果您只想保留周一到周五,您的条件是不准确的。请注意,weekday 返回一个 0 到 6 之间的整数,星期一为 0,星期日为 6。

    以整数形式返回星期几,其中星期一为 0,星期日为 6。

    这意味着您要检查返回的值是5 还是6


    由于其他原因,您的条件将不起作用。

    if some_datetime_object.datetime.weekday() != 6 or 1:
    

    这是说如果工作日不是星期日或真。您正在短路您的条件并强制所有内容为True。你需要把它变成这样(调整适当的值)

    if some_datetime_object.datetime.weekday() != 6 and some_datetime_object.datetime.weekday() != 1:
    

    我在下面的代码中使用not in做了不同的操作

    if datetime.datetime.strptime(d, '%Y%m%d').weekday() not in (5,6):
    

    import datetime
    
    dates = [
        "20150801",
        "20150802",
        "20150803",
        "20150804",
        "20150805",
        "20150806",
        "20150807",
        "20150808",
        "20150809",
    ]
    
    for d in dates:
        if datetime.datetime.strptime(d, '%Y%m%d').weekday() not in (5,6):
            print d
    

    这个输出:

    20150803
    20150804
    20150805
    20150806
    20150807
    

    【讨论】:

      【解决方案3】:
      from datetime import datetime
      date_string = '20150501'
      some_datetime_object = datetime(int(date_string[:4]), int(date_string[4:6]), int(date_string[6:]))
      

      但是,您的代码将不起作用,因为 if 语句写错了。正确的做法是:

      if some_datetime_object.datetime.weekday() not in (5,6)]:
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-24
        • 2019-12-29
        • 1970-01-01
        • 2014-12-13
        • 2011-10-25
        • 1970-01-01
        • 2016-07-30
        相关资源
        最近更新 更多