Time is a big enough subject that I'd never finish writing about it.
Fortunately this is a Linux technical blog, so I only have to talk about it from that perspective.
In a departure from our usual article series format, we are going to start with an introductory article and follow up starting from basics, introducing new concepts in order of complexity.
What is time?
Time is seconds since the unix epoch.
The Unix epoch is midnight, Thursday, 1st January 1970 in the UTC time zone.
If you know the unix time and how many seconds in each day since then you can use the unix timestamp to work out what time it is now in UTC time.
If you want to know the time in another timezone the naïve thing is to apply a timezone offset based on how far or behind the zone is compared to UTC.
This is non-trivial since time is a political issue, requiring global coordination with hundreds of countries coming in and out of [daylight saving time][] and various other administrative changes, time often changes.
Some times don't exist in some timezones. Samoa skipped a day and changed time zone.
A side-effect of your system clock being in Unix time is that to know local time you need to know where you are.
The talk linked to in https://fosdem.org/2017/schedule/event/python_datetime/ is primarily about time in python, but covers the relationship between time stamps, clock time and time zones.
http://www.creativedeletion.com/2015/01/28/falsehoods-programmers-date-time-zones.html is a good summary of some of the common misconceptions of time zone handling.
Now that we've covered some of the concepts we can discuss in future articles how this is implemented in Linux.