2015-01-19 3 views
-10

У меня есть список чисел, которые должны представлять даты, я пытаюсь изменить его из чисел в формат даты, например. 23-января ДатаСписок номеров на список дат

= (11,05, 12,05, 13,05, 16,05, 11,05, 16,05, 21,05, 22,05, 1,06, 2,06)

+1

ли вы на самом деле с помощью _numbers_ как 11.05 ("одиннадцать указать о-пять") в представляют одиннадцатую часть? –

+0

Что сказал tobias_k. Являются ли ваши данные в настоящее время в виде чисел с плавающей запятой или это в виде строк? –

ответ

3

Если в виде чисел с плавающей запятой:

from calendar import month_name 

date = (11.05, 12.05, 13.05, 16.05, 11.05, 16.05, 21.05, 22.05, 1.06, 2.06) 

for d in date: 
    day, month = divmod(d * 100, 100) 
    print('{} = {}-{}'.format(d, month_name[int(round(month, 0))], int(day))) 

Выход:

11.05 = May-11 
12.05 = May-12 
13.05 = May-13 
16.05 = May-16 
11.05 = May-11 
16.05 = May-16 
21.05 = May-21 
22.05 = May-22 
1.06 = June-1 
2.06 = June-2 
+1

Это не подходит для некоторых «дат», например «2.01» (в то время как «1.01» отлично работает). Это проблема с поплавками (как обычно), так как '201.' на самом деле' 200.999 ... ', и поэтому' int (0.999 ...) 'округляется до нуля. Вероятно, такая же проблема существует и для других чисел, но не тестировалась. –

+0

@tobias_k Я ничуть не удивлен ... Добавлен «math.ceil», чтобы компенсировать январь - не уверен, что они будут другими сюрпризами ... Хорошее место, хотя - спасибо –

+0

Есть и другие, которые идти в другом направлении, например '16.10', поэтому' ceil' также потерпит неудачу. Встроенный 'round' может быть лучше. См. '[100 * ((d + 1) + (m + 1)/100.) Для d в диапазоне (31) для m в диапазоне (12)]' –

1

Если вы не хотите использовать какие-либо внешние функции/библиотеки, вы можете сделать это так.

date = (11.05, 12.05, 13.05, 16.05, 11.05, 16.05, 21.05, 22.05, 1.06, 2.06) 
months={"05":"may","06":"june"} 


for num in date: 
    st=str(num).split('.') 
    print st[0],"-",months[st[1]] 
+4

Почему downvotes? Хотя идея использования чисел с плавающей запятой как даты является ужасной, на самом деле этот ответ работает. –

+1

@tobias_k: нет, если у вас есть '11.10', если вы специально не обозначаете' '1'' для обозначения октября. Для ясности! –

+0

@MartijnPieters Хорошая точка. Но опять же, это ИМХО проблема с подходом, данным в вопросе, а не проблема с ответом. –

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