Dates are a part of our lives and we are used to handling times and dates as a basic process. Even a small kid knows what time it is or what tomorrow means. But, try to talk to someone on the other side of the world and suddenly the concepts of tomorrow, midnight, and so on start to become very complex.
When you say tomorrow, are you talking about your tomorrow or mine? If you schedule a process that should run at midnight, which midnight is it?
To make everything harder, we have leap seconds, odd time zones, daylight savings, and so on. When you try to approach dates in software, especially in software as a service that might be used by people around the world, suddenly it becomes clear that dates are a complex affair.
This chapter includes some recipes that, while being short, can save you headaches and bugs when working with user-provided dates.