from random import randrange
from collections import namedtuple
from datetime import datetime


class Period(namedtuple('Period', ['dt_start', 'dt_end'])):
	def __str__(self):
		if self.one_day:
			return str(self.dt_start)
		return "{!s}–{!s}".format(self.dt_start, self.dt_end)
	
	@property
	def one_day(self):
		return self.dt_start.date() == self.dt_end.date()
		

def periods(dates):
	dates = sorted(dates)
	start = prev = dates[0]
	for date in dates:
		if (date - prev).days > 1:
			yield Period(start, prev)
			start = date
		prev = date
	yield Period(start, prev)


if __name__ == '__main__':	
	for period in periods(datetime(2016, 10, day) for day in (randrange(1, 31) for _ in range(20))):
		print(period)
