日期字符串转换为时间元组

3

我正在尝试将一个字符串传递给函数,并需要将其转换为时间元组:

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')

你能解释一下什么是整数时间元组吗?包括预期输出会有所帮助。 - shaktimaan
如果dt.date(2011,1,1)不是以2011,1,1格式出现,就会抛出错误,因此需要进行某种转换。 - pythonhunter
2
为什么不使用 strptime - jonrsharpe
导入日期时间模块并将其命名为dt - pythonhunter
3个回答

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()函数。

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()

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()引起的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接