日期字符串转时间元组

3 投票
3 回答
15127 浏览
提问于 2025-04-18 18:48

我想把一个字符串传递给一个函数,并且需要把它转换成一个时间元组:

def  sim(startdate, enddate):
    # need to convert the date from string to integer time tuple:
    dt_start = dt.date(startdate)
    print 'Start Date: ', dt_start

    dt_end = dt.date(enddate)
    print 'End Date: ', dt_end

# in String format
sim('Jan 1, 2011', 'Dec 31, 2011')

# in interger in string format
sim('2011,1,1', '2011,12,31')

3 个回答

1

你可能想要做的事情是这样的:

import datetime as dt

year,month,day = map(int, '2011,1,1'.split(','))
dt_start = dt.date(year,month,day)
print dt_start # prints 2011-01-01

出现这个错误是因为你用了一个字符串 '2011,1,1',而不是用整数:2011,1,1,作为输入给 datetime.date()

2

我猜你想把日期('Jan 1, 2011','Dec 31, 2011')和('2011,1,1','2011,12,31')转换成时间元组。

 from datetime import datetime
 date_str = "Jan 1, 2011"
 fmt = "%b %d, %Y"

 # Construct a datetime object
 date_obj = datetime.strptime(date_str, fmt)

 # Convert it to any string format you want
 new_fmt = "%Y, %m, %d"
 print date_obj.strftime(new_fmt)
 # Prints'2011, 01, 01'

 # If you want python timetuple then
 t_tuple = date_obj.timetuple()
3

另一种方法是使用 strptime()。你可以为你的两种时间格式定义一个时间格式,然后根据这个格式来使用。这就是我所说的:

import datetime as dt

def  sim(startdate, enddate):
    time_format_one = "%b %d, %Y"
    time_format_two = "%Y,%m,%d"

    try:
        dt_start = dt.datetime.strptime(startdate, time_format_one)
        dt_end = dt.datetime.strptime(enddate, time_format_one)
    except ValueError:
        dt_start = dt.datetime.strptime(startdate, time_format_two)
        dt_end = dt.datetime.strptime(enddate, time_format_two)

    print 'Start Date: ', dt_start.date()
    print 'End Date: ', dt_end.date()

# in String format
sim('Jan 1, 2011', 'Dec 31, 2011')

# in interger in string format
sim('2011,1,1', '2011,12,31')

输出结果是:

Start Date:  2011-01-01
End Date:  2011-12-31
Start Date:  2011-01-01
End Date:  2011-12-31

如果你需要时间元组,可以在 dt_startdt_end 上使用 timetuple()

撰写回答