Nem vagyok rutinos programozás, sql és időmérés témában sem:-) Kis hobbi projektben a problémám:
Egyszerű mysql tábla, az egyik mező timestamp. Python-ból tolnék bele utc-s időbélyegeket. A tavaszi óraállításkor, mikor 2:00-ról 3:00-ra ugrunk nekem vannak utc szerint köztes időpontok is, amit ilyen formában insert-elek pl: "2016-03-27 02:17:00"
De minden ilyen 2:00-3:00 közötti érték 2016.03.27 03:00:00 -val kerül be. Ha jól gondolom, UTC-ben nem kéne óraállításnak lenni, de lehet, hogy vannak fogalomzavaraim.
Erre van valami egyszerű megoldás? Köszönöm
- 195 megtekintés
Hozzászólások
Minden idoadatot Unix timestamp-be tarolj le. Sima int-kent ha nem felsz 2038-tol, egyebkent meg 64-bites intkent. Biztos van egy adott sql-nek valamifele tipusa idobelyegzesre, de az a tuti ha kezben tartod a dolgokat. Szub-masodperces pontossag igenye eseten double, julian-datum, vagy barmi megfelelo (fixpontos long int, stb) is jatszhat.
A tobbi marcsak megjelenites kerdese. Hogy "11", "Nov", "November", "Szent Andras hava" format hasznalsz a datum kiiratasara vagy nyari, teli, hawaii vagy nepali idoszamitas szerint adod ezt meg az mar csak es kizarolag a megjelentes megjenelitesenek (legutolso) lepese legyen.
- A hozzászóláshoz be kell jelentkezni
Mysql-lel nagyon regen foglalkoztam. Postgresql-ben van kulon timezone-os es anelkuli idotipus, tud konvertalni, es a pythonos PG modul (psycopg2) is megoldja a kezeleset (mondjuk pythonban egy kicsit elbonyolitottak szerintem az idokezelest, de az mas kerdes). Ha tippelnem kene, a mysql vonal is hasonloan kezeli, de ha timezone-os idokent adsz meg neki invalid erteket, akkor nem tud vele mit kezdeni, es a legkozelebbi ervenyesre kerekiti. Ha a UTC-s ertekedrol o is tudja, hogy az bizony UTC, akkor nem kene, hogy szamitson.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
Köszönöm a válaszokat, @apal tanácsát megfogadtam, erre egyszerű is volt átalakítani és működőnek is tűnik. @Nyosigomboc: ha jól tudom, MySQL-ben nincs timezone-os időtípus.
- A hozzászóláshoz be kell jelentkezni
A dokumentáció ezt írja:
MySQL converts
TIMESTAMP
values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval. (This does not occur for other types such asDATETIME
.) By default, the current time zone for each connection is the server's time. The time zone can be set on a per-connection basis. As long as the time zone setting remains constant, you get back the same value you store. If you store aTIMESTAMP
value, and then change the time zone and retrieve the value, the retrieved value is different from the value you stored. This occurs because the same time zone was not used for conversion in both directions. The current time zone is available as the value of thetime_zone
system variable. For more information, see Section 5.1.15, “MySQL Server Time Zone Support”.
Vagyis több megoldási lehetőség is adódik:
- DATETIME-ot használsz, ami nem jár időzóna konverzióval
- beállítod a szerver időzónáját UTC-re
- beállítod a session időzónáját UTC-re
- A hozzászóláshoz be kell jelentkezni