将一串数字转换为datetime对象

时间:2015-08-12 13:10:23

标签: python datetime weekday

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

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

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

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

3 个答案:

答案 0 :(得分: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方法解析几乎所有带日期/时间数据的字符串。

答案 1 :(得分:0)

您可以使用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

答案 2 :(得分:-1)

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)]: