2014-08-28 71 views
1

这是我的问题:日期字符串时间元组(蟒蛇)

我试图将字符串传递到的功能,需要将其转换成时间的元组:

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

你能解释你的意思是一个整数时间元组吗?包括预期的输出将有助于 – shaktimaan 2014-08-28 06:04:54

+0

如果不是2011,1,1格式,dt.date(2011,1,1)将引发错误,因此需要以某种方式进行转换。 – pythonhunter 2014-08-28 06:07:19

+0

什么是dt ????? – thavan 2014-08-28 06:09:19

回答

2

另一种方法是使用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(),如果你需要时间的元组。

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

+0

效果不错,但也许有另一种转换方式。 – pythonhunter 2014-08-28 06:18:45

+0

@pythonhunter肯定 - 你可以传入ints而不是字符串,否则你将不得不解析它。你有什么样的其他方式? – alfasin 2014-08-28 06:22:07

0

我假设你要转换日期( '2011年1月1日', '2011年12月31日')和( '2011,1,1', '2011,12,31')到timetuple

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