Via een scriptje heb ik een tijdje tweets gedownload via de search api. De json bevat geeft onder andere de datum en tijd waarop de tweet is aangemaakt. Deze tijd is omgerekend naar UTC:
Nu heb ik deze data opgeslagen als timestamp mbv PHP's strtotime. Ik denk er pas nu aan dat mijn server ingesteld staat op Europe/Paris (gevonden via date_default_timezone_get()) en heeft opgeslagen:
De eerste vraag waar ik nu niet uitkom is: is die timestamp (1298063318) nu in UTC of Europe/Paris (UTC +1 of +2, ligt aan DST)? Of dwingt die +0000 strtotime om een timestamp te maken in UTC, ongeacht de instelling van mijn server?
Vraag 2: ik heb tweets verzameld van 1 januari tot 1 mei 2011. Betekent dat nu dat sommige timestamps berekend zijn met DST (dus: +2) en anderen zonder (dus: +1)? En zo ja, hoe kan ik dat "op 1 lijn trekken"? Hier wat informatie over deze tijdzone en DST.
Vraag 3: waar het uiteindelijk om gaat is dat ik originele created_at datum van de twitter api, wil omrekenen naar new york lokale tijd. NY ligt in timezone EST, op -5 uur van UTC. Als een tweet dus geleverd is met als created_at datum
dat wil ik die omrekenen naar hoe laat het op dat moment in NY was (5 uur vroeger dus):
Kortom, ik heb nu de volgende database tabel (met nyse_date en nyse_time nu nog leeg):
Je ziet weer staan: de timestamp die ik ook heb ingevoerd. nysq_datum en nyse_time spreken voor zich. Met bovenstaande in acht nemende, is er dan een SQL query mogelijk waarmee ik de datum en tijd kan bepalen die het op het moment van die timestamp (die dus misschien niet in UTC maar door mij als Europe/Paris is opgeslagen)?
Ik denk dat je in principe als volgt de dag en tijd uit de timestamp kunt halen.
Maar nogmaals - die timestamp is (i) misschien niet eens in UTC en (ii) zeker niet in EST tijd. Met andere woorden; wie kan mij vertellen hoe ik die timestamps juist krijg naar NY datum en tijd? Als ik er vanuit kan gaan dat de created_at timestamps in UTC zijn, kan ik daar natuurlijk (5 urr x 60 minuten x 60 seconden) 18.000 seconden vanaf halen om op de utc_timestamp te komen (toch?).
Maar nog een probleem. Stel dat de van twitter gekregen datum "Fri Feb 18 02:08:38 +0000 2011" is. Dan moet er voor die tweet in nyse_date 2011-02-17 (en niet 18!) en in nyse_time 21:08:38 worden opgeslagen. Met andere woorden; welke query houdt er rekening mee dat -5 uur dan ook kan betekenen dat de nyse_date de dag ervoor kan zijn?
P.S. Ik maak het vast moeilijker dan het is, maar zit er nu al zo lang over na te denken (en te zoeken op internet), dat ik volledig door de war ben
code:
1
| created_at: Fri Feb 18 21:08:38 +0000 2011 |
Nu heb ik deze data opgeslagen als timestamp mbv PHP's strtotime. Ik denk er pas nu aan dat mijn server ingesteld staat op Europe/Paris (gevonden via date_default_timezone_get()) en heeft opgeslagen:
PHP:
1
| strtotime('Fri Feb 18 21:08:38 +0000 2011') // geeft 1298063318 |
De eerste vraag waar ik nu niet uitkom is: is die timestamp (1298063318) nu in UTC of Europe/Paris (UTC +1 of +2, ligt aan DST)? Of dwingt die +0000 strtotime om een timestamp te maken in UTC, ongeacht de instelling van mijn server?
Vraag 2: ik heb tweets verzameld van 1 januari tot 1 mei 2011. Betekent dat nu dat sommige timestamps berekend zijn met DST (dus: +2) en anderen zonder (dus: +1)? En zo ja, hoe kan ik dat "op 1 lijn trekken"? Hier wat informatie over deze tijdzone en DST.
Vraag 3: waar het uiteindelijk om gaat is dat ik originele created_at datum van de twitter api, wil omrekenen naar new york lokale tijd. NY ligt in timezone EST, op -5 uur van UTC. Als een tweet dus geleverd is met als created_at datum
code:
1
| created_at: Fri Feb 18 21:08:38 +0000 2011 |
dat wil ik die omrekenen naar hoe laat het op dat moment in NY was (5 uur vroeger dus):
code:
1
| NY Time: Fri Feb 18 16:08:38 2011 |
Kortom, ik heb nu de volgende database tabel (met nyse_date en nyse_time nu nog leeg):
code:
1
2
3
| id nyse_date nyse_time created_at ------------------------------------------- 1 2011-02-18 16:08:38 1298063318 |
Je ziet weer staan: de timestamp die ik ook heb ingevoerd. nysq_datum en nyse_time spreken voor zich. Met bovenstaande in acht nemende, is er dan een SQL query mogelijk waarmee ik de datum en tijd kan bepalen die het op het moment van die timestamp (die dus misschien niet in UTC maar door mij als Europe/Paris is opgeslagen)?
Ik denk dat je in principe als volgt de dag en tijd uit de timestamp kunt halen.
SQL:
1
| UPDATE tweets SET nyse_date = DATE_FORMAT(FROM_UNIXTIME(created_at), '%Y-%m-%d'), nyse_time = DATE_FORMAT(FROM_UNIXTIME(created_at), '%H-%i-%s') |
Maar nogmaals - die timestamp is (i) misschien niet eens in UTC en (ii) zeker niet in EST tijd. Met andere woorden; wie kan mij vertellen hoe ik die timestamps juist krijg naar NY datum en tijd? Als ik er vanuit kan gaan dat de created_at timestamps in UTC zijn, kan ik daar natuurlijk (5 urr x 60 minuten x 60 seconden) 18.000 seconden vanaf halen om op de utc_timestamp te komen (toch?).
Maar nog een probleem. Stel dat de van twitter gekregen datum "Fri Feb 18 02:08:38 +0000 2011" is. Dan moet er voor die tweet in nyse_date 2011-02-17 (en niet 18!) en in nyse_time 21:08:38 worden opgeslagen. Met andere woorden; welke query houdt er rekening mee dat -5 uur dan ook kan betekenen dat de nyse_date de dag ervoor kan zijn?
P.S. Ik maak het vast moeilijker dan het is, maar zit er nu al zo lang over na te denken (en te zoeken op internet), dat ik volledig door de war ben
[ Voor 12% gewijzigd door Verwijderd op 07-04-2012 22:29 ]