2012-02-10 3 views
0

Я пытаюсь изменить выходное форматирование strptime и DateTime по умолчанию в своих функциях:time.strptime изменение выходного форматирования

def start_week_date(year, week): 
     format_string = "%i %i 1" % (int(year),int(week)) 
     start = time.strptime(format_string, '%Y %W %w') 
     print datetime.date(start.tm_year, start.tm_mon, start.tm_mday) 
     return datetime.date(start.tm_year, start.tm_mon, start.tm_mday) 

выход которого передается на другой:

for date_oncall in date_range(start_week_date(year,week), start_week_date(year,week+1)): 
    print date_oncall 

def date_range(start_date, end_date): 
    """Generator of dates in between""" 
    if start_date > end_date: 
     raise ValueError("Start date is before end date.") 
    while True: 
     yield start_date 
     start_date = start_date + datetime.timedelta(days=1) 
     if start_date >= end_date: 
      break 

Есть ли элегантный способ изменить форматирование по умолчанию, поэтому, если день месяца или месяц < 10 он не получает «0» в начале? В основном вместо '03 -05-2012 'Я хотел бы получить «3-5-2012».

Большое спасибо за любые предложения.

С уважением, Якуб

+0

Похоже, что это должно ответить на ваш вопрос. http://stackoverflow.com/questions/2309828/get-rid-of-leading-zeros-for-date-strings-in-python –

+0

Привет Дэн, Спасибо за подсказку - я не нашел это нить перед тем. J. –

ответ

4

date объекты имеют метод, strftime, чтобы вручную указать формат, но он не имеет возможность делать то, что вы хотите, - это так, это означает, что вам нужно создать строку себя от других атрибутов date_oncall. Хорошей новостью является то, что это довольно просто:

>>> '{d.day}-{d.month}-{d.year}'.format(d=date_oncall) 
'17-1-2010' 
+0

Это именно то, что я искал - спасибо! C [_] (виртуальная чашка кофе для вас :)) Не могли бы вы объяснить, что происходит, когда вы строите эту строку? Я не могу полностью понять, в чем разница между «{0}». Format (date_oncall) и вашим путем. –

+0

Это эквивалентно '{} - {} - {}. Format (date_oncall.day, date_oncall.month, date_oncall.year)'. Формат minilanguage позволяет помещать поиск атрибута в саму строку, что полезно для ясности в таких случаях. Аргумент ключевого слова ('d = date_oncall') позволяет нам использовать имя для объекта внутри строки -' .day} - {. Month} - {. Year} 'отлично, но ему нужно дать ту же дату три раза, поскольку три '{}' используют последовательные позиционные аргументы. Итак, вам нужно '{0.day} - {0.month} - {0.year}', но в качестве этой точки вы также можете использовать аргумент ключевого слова. – lvc

+0

Еще раз спасибо lvc - Я не знал, что strftime имеет атрибуты, перечисленные выше. Я читаю временную документацию, и это стало яснее. Cheers, J. –

0

Проверить эту ссылку:

http://www.tutorialspoint.com/python/time_strftime.htm

с помощью

time.strftime(string[, format]) 

вы можете указать день формат месяца без '0' в начиная, используя '% e'.

+0

'% e' не представляется доступным для strftime:' date_oncall.strftime ('% e') 'дает' ValueError'. – lvc

Смежные вопросы