2014-08-28 3 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

+0

dt.date (2011,1,1) выдает ошибку, если не в формате 2011,1,1, поэтому необходимо каким-то образом преобразовать. – pythonhunter

+0

Что такое dt ????? – thavan

ответ

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 

Вы можете использовать timetuple() на dt_start и dt_end, если вам нужно время кортеж.

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

+0

@pythonhunter sure - вы можете передать ints вместо строки, иначе вам придется разбирать ее. Что вы еще имели в виду? – alfasin

0

Я предполагаю, что вы хотите, чтобы преобразовать дату ('Jan 1, 2011', '31 Дек, 2011') и ('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() 
Смежные вопросы