There are many ways to express that you are late:
- "Ich bin (zu) spät (dran)."
- "Ich habe mich verspätet."
- "Ich komme (zu) spät."
- "Ich bin verspätet angekommen."
Everyone of these sentences focuses on another aspect and can be said in different situations to different people. To give an overview let's say you go to school. One person you might talk to is your mother (B) at home before you leave. A random person (C) on your way (after the train ride), the teacher (D) awaiting you and a classmate you meet lateron at school (E) are three other possible conversation partners. A short train ride is part of your way to school.
"Ich bin (zu) spät (dran)." is the most general of these sentences. You can say it to B (to explain why you are in a hurry), to C and to D as well. The most unlikely use is with D and to use it with E is not possible, since you won't be in a hurry lateron when meeting E.
"Ich habe mich verspätet.": the tense used is 'Perfekt' aka 'vollendete Gegenwart' (=present perfect). So you are already 'done with being late'. That's nothing you would say to B or C. It is not very common to say it to D either. Since you are in a hurry when you arrive, you usually do not feel like you have arrived yet, until you have sat in your chair. But the conversation with your teacher D usually takes place immediately after entering the room. It is a sentence you'd normally use to tell E what happened lateron.
"Ich komme (zu) spät." is used just like "Ich bin (zu) spät (dran).". The difference is the verb: "kommen" (=come). So you are late getting somewhere. This sentence is only used if you physically change where you are which means that this is never used to express being late to write an essay ect..
"Ich bin verspätet angekommen." is like "Ich habe mich verspätet." a sentence you'd use to tell E what happened OR as it uses the verb "ankommen" which specifically means arriving, you might say it to C and D to express that you weren't late until the train was late. In this specific context you would of course have to say some sentences more to express that since the one sentence here does not include the train ride and you can't assume that everyone knows about your way to school.
One important little fact you should memorize here is that sentences using "spät" (=late) can be complemented with the little word "zu"(=too) to express the difference of being late and being too late. If you use the verb "verspäten" on the other hand there is no differentiation like that. It always means that you are not in time. Just imagine you should arrive somewhere at 10 o'clock. If you arrive at 9:57 you are late but not too late: "Du bist spät aber nicht zu spät." and therefore: "du hast dich nicht verspätet." (nur fast - only almost). Another difference in usage to make it a little more dramatic: If you try to save a life you may be too late but you'd never use "verspäten" there.
"verspäten" (never combined with too - zu) <--> "spät" (combinable with too - zu)