# Time in Java

* https://stackoverflow.com/questions/32437550/whats-the-difference-between-instant-and-localdatetime Time is awkward in code. In reality you cannot fix the actual time, it just keeps on going.

There are different ways of representing time in java, some are best practice, some are legacy, some have issues:

* instant
* LocalDate
* LocalDateTime
* LocalTime
* ZoneDateTime
* Date
* The problem with time, comes with internationalisation, workign with time in different timezones, and especially when doing things between to things in different timezones.
* we have another issue of daylight savings
* Due to this complexity and current time is never fixed, the chances of creating bugs are high. Thus we need ways of being able to test code that deal with time
* To handle legacy
  * either convert or do a full migration to Time package
  * Might be using JodaTime, which is not actively worked on, so best to migrate to Time package

## Testing time

* In general, we can use the same ideas of DI and mocking to control time
  * We consider the act of getting the current time (ie Instant.now()) as a service behind an interface

### Links

* amigos code
  * https://www.youtube.com/watch?v=PrPQ5xHYa0s

## Issues

* SimpleDateFormat is not thread safe when sharing this object between threads
  * Need to instantiate a new object for each thread
  * Use FastDateFormat from apache commons, which is threadsafe
  * https://www.youtube.com/watch?v=JdNQoTJmzis Java's SimpleDateFormat is a Disaster Waiting to Happen

## Links

* https://www.youtube.com/watch?v=0XgdX5hDL4U Java basics of the LocalDate, LocalTime, LocalDateTime, ZonedDateTime and the DateTimeFormatter
* https://unix4lyfe.org/time/?v=1
