musiKk already gave a good explanation. I think, however, that the definition might totally depend on your day (since it's really very subjective), especially on your Essgewohnheiten (eating habits):
- From waking up until about breakfast time, it's Morgen (maybe for another hour)
- Lunch time is Mittag (hence Mittagessen)
- Evening meal time starts Abend (hence Abendbrot / Abendessen)
- Between breakfast and lunch, it's Vormittag
- Between lunch and evening meal, it's Nachmittag
- Night starts when you go to bed (or some time before), and ends when you wake up. Since the Morgen is the first part of the day, this also means that the new day also starts after you woke up - and not right after midnight.
- When you get home from work, it is Feierabendzeit - note that there's also Abend in the word.
This leads to situations like this: When I come to work, it's Morgen for me - but some people greet me with Mahlzeit - even though by other definitions, like the one by musiKk, this is Vormittag ;) On the other hand, this doesn't matter, since we mostly say Moin all day.
The consequence of this definition is that for example some people have Mittag at 11 am, while others have it at 2 pm. For some, the Morgen ends at 7 am, for others it ends at 10 am. This seems to match usage of these words for many people (from my observations).
All these time expressions can be modified with früh or spät. Später Morgen and früher Vormittag blend into each other, später Vormittag and Mittag, and so on.