iOS date are often encoded or processed as seconds from ReferenceDate
e.g.
Date(timeIntervalSinceReferenceDate:)
Documentation for this is:
Summary
Creates a date value initialized relative to 00:00:00 UTC on 1 January 2001 by a given number of seconds.
Can run your number through this, and you will get your date back:
Date(timeIntervalSinceReferenceDate: 589331953.61679399)
output: "2019-09-04 23:19:13 +0000\n"
As far as the explicit encoding documentation goes. This is pretty terse.
There is a reference to the default encoding strategy in the documentation saying:
The default strategy is the JSONEncoder.DateEncodingStrategy.deferredToDate strategy.
However, there doesn't seem to be any clarity on what this actually means (beyond manual testing), reference is currently here. Even digging into the interface files, there doesn't seem to be any more light.