Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bag timezone #233

Merged
merged 3 commits into from
Jan 23, 2018
Merged

Bag timezone #233

merged 3 commits into from
Jan 23, 2018

Conversation

borrob
Copy link
Contributor

@borrob borrob commented Jan 20, 2018

Deeloplossing voor issue #223 (alleen BAG)

Bij het inlezen van de BAG-gegevens wordt de tijdzone ingesteld op 'Europe/Amsterdam' en hiermee worden alle data van die tijdzone voorzien. Dit gaat er dus vanuit dat de BAG-gegevens altijd in die tijdzone zijn opgesteld, maar dat lijkt me een redelijke aanname. Consequentie is dat voor wintertijd UTC+1 en voor zomertijd UTC+2 wordt gehanteerd.

Alternatieve oplossing is de ISO-string bij het inlezen (zie BAGdatetimeAttribuut ) aan te passen naar een tijdzone, maar dat geeft wat meer code-gedoe, terwijl postgres het eenvoudig kan oplossen.

Overigens geeft het tijdstip meer een "volgorde in de dag" aan dan een specifieke tijd (zie pagina 8 van BAG koppelvlak.

In de BAG database stonden de tijdvelden zonder een tijdzone. Dat
is met deze commit aangepast. Standaard wordt de tijdzone 'Europe/
Amsterdam' gebruikt. Dat betekent GMT+1 of GMT+2 (zomertijd).
Postgres is zelf slim genoeg om die omzetting te kunnen maken. Niet
getest met Oracle.
@borrob borrob mentioned this pull request Jan 21, 2018
@justb4 justb4 self-requested a review January 22, 2018 15:08
@justb4 justb4 added this to the Versie 1.4.0 milestone Jan 22, 2018
@justb4
Copy link
Contributor

justb4 commented Jan 22, 2018

Eens met de schema wijzigingen.

Het aanpassen van de ISO-string in BAGAttribuut heeft mijn voorkeur: met self.uitvoeren("SET time zone '%s'" % tijdzone) zet je toch de tijdzone voor de hele database? Dat kan voor sommigen wat onbedoelde effecten hebben en weet niet of daar altijd permissies voor zijn (kan mogelijk van gebruiker/role afhangen).

De ISO string aanpassen in BAGAttribuut L340 is m.i. eenvoudigweg:

self._waarde = '%s-%s-%s %s:%s:%s.%s UTC+1' % (jaar, maand, dag, uur, minuut, seconden, secfract).

Dan wordt aangegeven: deze tijd is in UTC+1 (staat los van zomer/wintertijd m.i.).

Maar goed idd gaat het meer om de datum, hoewel tijd 00:00:00 meestal is en daardoor in sommige gevallen de datum kan worden veranderd als uitgegaan wordt van UTC. Blijft lastig onderwerp!

@borrob
Copy link
Contributor Author

borrob commented Jan 22, 2018

Het aanpassen van de ISO-string in BAGAttribuut heeft mijn voorkeur: met self.uitvoeren("SET time zone '%s'" % tijdzone) zet je toch de tijdzone voor de hele database? Dat kan voor sommigen wat onbedoelde effecten hebben en weet niet of daar altijd permissies voor zijn (kan mogelijk van gebruiker/role afhangen).

Nee, SET time zone stelt alleen de time zone voor de sessie, niet voor de hele database. Zie de postgresql documentatie. Daarmee zou het redelijk veilig moeten zijn.

self._waarde = '%s-%s-%s %s:%s:%s.%s UTC+1' % (jaar, maand, dag, uur, minuut, seconden, secfract).

Dan wordt aangegeven: deze tijd is in UTC+1 (staat los van zomer/wintertijd m.i.).

Ja, aan zo'n oplossing had ik ook gedacht, maar volgens mij stap je dan te snel over het zomer/wintertijd-probleem heen. De 'Nederlandse tijd' is soms UTC+1 en soms UTC+2.

Maar goed idd gaat het meer om de datum, hoewel tijd 00:00:00 meestal is en daardoor in sommige gevallen de datum kan worden veranderd als uitgegaan wordt van UTC.

Inderdaad, sterker nog: volgens mij wordt de tijd hier enkel gebruikt om een volgorde aan te geven, niet zo zeer specifieke tijden.

Blijft lastig onderwerp!

Tijdzone, zomertijd, wintertijd: altijd een gedoe, zeker als je de wereld wilt overnemen.

@XtheOne
Copy link
Contributor

XtheOne commented Jan 22, 2018

Denk ook om dat als je de tijd veranderd met een tijdzone offset je de kans loopt een record over de dag heen te tillen.
Nu zal er niet zo snel een mutatie om 23:30 in de BAG komen, maar je hebt dan de kans dat een entry een dag later komt te staan in nlextract.
En hoe gaan gemeenten om met hoe de tijd weggeschreven worden? Local time?

@justb4
Copy link
Contributor

justb4 commented Jan 23, 2018 via email

@@ -57,6 +57,7 @@ def verbind(self, initdb=False):
self.maak_schema()

self.zet_schema()
self.zet_tijdzone();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hier staat nog overbodige ;

@justb4
Copy link
Contributor

justb4 commented Jan 23, 2018

alleen de ; nog weg dan kan ik mergen.

@borrob
Copy link
Contributor Author

borrob commented Jan 23, 2018

Aaarghh! Dat is wel erg stom. Hij is weg nu.

@justb4 justb4 merged commit 17bc4bc into nlextract:master Jan 23, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants