Uw voorgestelde oplossing is correct. Of beter gezegd, het is een van de vele juiste implementaties. Elk van de volgende dingen zou werken:
- Sla de UTC-tijdstempel op in het ene veld, sla de offset op in een ander.
- Bewaar de lokale tijdstempel in het ene veld, sla de offset op in een ander.
- Bewaar de lokale
date
in één veld en sla eentime with time zone
op in een andere. (hoeweltime with time zone
wordt over het algemeen afgeraden...) - Bewaar de UTC-tijdstempels in het ene veld en de lokale tijdstempels in een ander.
Veruit de gemakkelijkste is de eerste, die je al hebt voorgesteld.
Ik zou vermijden om tijdstempels op te slaan in text
velden, omdat ze meestal niet erg efficiënt doorzoekbaar zijn.
Merk ook op:als u uit een SQL Server-achtergrond komt, herinnert u zich misschien de datetimeoffset
type, dat de lokale datetime en offset in het veld opslaat en het UTC-equivalent gebruikt tijdens het indexeren. Het is gebruikelijk om te denken dat de timestamp with time zone
van Postgres en MySQL zouden hetzelfde gedrag vertonen, maar dat doen ze niet. Ze gebruiken gewoon de sessie tijdzone om te converteren naar/van UTC. SQL Server heeft geen concept van een sessietijdzone, en dus de discrepantie.
Lees zeker dit deel van de Postgres-documenten .