Literally, iterate through the list creating start and end datetime objects.
Here I simply print them but you can store them in another list, whatever, for later calculations.
import datetime
A = [['24/02/2022', '11', '12', 'task1'],['24/02/2022', '9', '10', 'task2'],['24/02/2022', '14', '18', 'task1'],['24/02/2022', '13', '14', 'task3'] ]
>>> A
[['24/02/2022', '11', '12', 'task1'], ['24/02/2022', '9', '10', 'task2'], ['24/02/2022', '14', '18', 'task1'], ['24/02/2022', '13', '14', 'task3']]
>>> for item in A:
... start = datetime.datetime.combine(datetime.datetime.strptime(item[0],'%d/%m/%Y'), datetime.time(int(item[1]), 0))
... end = datetime.datetime.combine(datetime.datetime.strptime(item[0],'%d/%m/%Y'), datetime.time(int(item[2]), 0))
... print(start, end, item[3])
...
2022-02-24 11:00:00 2022-02-24 12:00:00 task1
2022-02-24 09:00:00 2022-02-24 10:00:00 task2
2022-02-24 14:00:00 2022-02-24 18:00:00 task1
2022-02-24 13:00:00 2022-02-24 14:00:00 task3
See: Pythonic way to combine datetime.date and datetime.time objects
for datetime.combine answer
Edit subject to your comment:
Why do the hard work when someone has already done that work for you?
There is a module called DateTimeRange
https://pypi.org/project/DateTimeRange/
Not tested exhaustively:
import datetime
from datetimerange import DateTimeRange
A = [
['24/02/2022', '11', '12', 'task0'], ['24/02/2022', '9', '10', 'task1'], ['24/02/2022', '14', '18', 'task2'],
['24/02/2022', '13', '14', 'task3'], ['24/02/2022', '13', '15', 'task4']
]
# periods will be [start, end, task_id, overlaps, overlaps_with]
periods = []
for item in A:
start = datetime.datetime.combine(datetime.datetime.strptime(item[0],'%d/%m/%Y'), datetime.time(int(item[1]), 0))
end = datetime.datetime.combine(datetime.datetime.strptime(item[0],'%d/%m/%Y'), datetime.time(int(item[2]), 0))
periods.append([start, end, item[3], False, ''])
for period in periods:
if period[3] == True: # test for already True overlap
continue
range = DateTimeRange(period[0], period[1])
for test_loop in periods:
if test_loop[2] == period[2]: # test for testing against self using task string
continue
test = DateTimeRange(test_loop[0], test_loop[1])
if test.is_intersection(range):
print (test_loop[2], "overlaps", period[2])
period[3] = True
period[4] += test_loop[2]+', '
for period in periods:
print(period)
Results in:
task3 overlaps task2
task4 overlaps task2
task2 overlaps task3
task4 overlaps task3
task2 overlaps task4
task3 overlaps task4
[datetime.datetime(2022, 2, 24, 11, 0), datetime.datetime(2022, 2, 24, 12, 0), 'task0', False, '']
[datetime.datetime(2022, 2, 24, 9, 0), datetime.datetime(2022, 2, 24, 10, 0), 'task1', False, '']
[datetime.datetime(2022, 2, 24, 14, 0), datetime.datetime(2022, 2, 24, 18, 0), 'task2', True, 'task3, task4, ']
[datetime.datetime(2022, 2, 24, 13, 0), datetime.datetime(2022, 2, 24, 14, 0), 'task3', True, 'task2, task4, ']
[datetime.datetime(2022, 2, 24, 13, 0), datetime.datetime(2022, 2, 24, 15, 0), 'task4', True, 'task2, task3, ']