nagyon szívesen röhögnék a MÁV-on, de az eddigi munkatapasztalatom az, hogy tök normális piaci cégeknél is élet-halál harcot kell vívni legtöbbször, hogy mindig UTC-ben tároljunk minden időt. az emberek nem értik az időt, még a legtöbb programozó sem.
Valóban állandó szopás van a dátumokkal, mert a fejlesztők nem bírják átgondolni.
Esetünkben pont az a baj például, hogy valamit UTC-ben néznek, pedig itt pont, hogy nem kellene :) :) :)
A 10 óra 2 perces Juliska IC helyi idő szerint 10 óra 2 perckor indul, UTC viszont nem követi DST-t, azaz DST váltáskor helyi idő szerint tolódik az indulás időpontja. Vagy local timeban (azaz időzóna nélkül) tárolod, vagy kódolgatnod kell, hogy kezeld a DST-t.
Esetünkben pont az a baj, hogy egy UTC szerinti dátumot egy local time-al hasonlítanak össze. Pl UTC-ben tárolták a vonat indulását, amit összehasonlítanak a helyi idővel. A helyi idő változatlanul 10 óra 2 perc, de mikor a helyi idő elcsúszott az UTC-hez képest, a vonat indulása eltolódott, ez okozza az issuet.
> Esetünkben pont az a baj, hogy egy UTC szerinti dátumot egy local time-al hasonlítanak össze.
tehát a mindig pontos UTC-t összehasonlítjuk a pontatlan/változó/megbízhatatlan értékkel, és ez az UTC hibája, nem a pontatlan/változó/megbízhatatlan értéké. nincs több kérdésem.
a nagyok úgy csinálják, hogy UTC-ben tárolnak mindent, mert az sosem változik és megbízható, és minden bejövő helyi idő fiszfasz időzóna szerinti fost az első adandó alkalommal konvertálnak UTC-be, mert az UTC az nem változik és megbízható. így aztán mindig és kivétel nélkül UTC-t fognak összehasonlítani UTC-vel, és csodák csodájára nem omlik össze a rendszer csak azért, mert holnaptól valami szabály alapján a zsidó naptár szerint számoljuk az éveket és kínai holdnaptár szerint a hónapokat.
"Az UTC nem változik, és megbízható" - ez igaz - de a Juliska IC indulásának időpontja viszont változik. Azaz az UTC nehezen használható Juliska IC indulásának a modellezésére.
Nem, nem azt mondtam, hogy az UTC mindenre jó. Azt mondtam, hogy az UTC tárolni jó, meg számolni jó. Mert hogy azokra jó.
A Napfény IC (Juliskát nem találtam a menetrendben) ma 1774795800-kor indul a Nyugatiból. Tegnap 1774713000-kor indult. Sikerült modellezni. Majd ha felhasználónak mutatom meg, akkor szebben fogom formázni, de az én use case-em az, hogy ha én felolvasok egy timestampet, akkor mindig kivétel nélkül meg tudjam mondani, hogy pontosan melyik időpontra mutat, és hogyha összehasonlítok két ilyen timestampet, akkor mindig kivétel nélkül jók legyenek a számítások. Aki szerint a helyi időmegjelenítési forma a source of truth, mer' há' az van kinyomtatva a menetrendbe, az fordítva ül a lovon.
Látom, nem akarod érteni, amit írok. :)
Nem a számítás pontosságával van a gond, hanem azzal, hogy honnét szerzed a két timestampot, amit összehasonlítassz.
Amiről te beszélsz, annak semmi köze ahhoz, h UTC-t tárolsz-e.
> Nem a számítás pontosságával van a gond,
ezt mondd a MÁV-nak, biztos nagyon meg fogja nyugtatni őket, hogy pontosak a számításaik (spoiler alert: nem azok)
> hanem azzal, hogy honnét szerzed a két timestampot, amit összehasonlítassz.
Pontosan. Lássuk mit is írtam erről? "és minden bejövő helyi idő fiszfasz időzóna szerinti fost az első adandó alkalommal konvertálnak UTC-be" mert. azzal. műkődnek. a. számolások. mert. nem. számít. honnan. származik.
De nyilván én vagyok az aki *nem akarja* érteni amit a másik ír, miközben te söpröd le a magyarázataimat azzal, hogy "nincs olyan, hogy a nagyok így csinálják". De. Van. Nem véletlenül.
Mindenesetre köszönöm, hogy ilyen hosszú kommentszálban demonstráltad, az eredeti állításomat, hogy élet-halál harcot kell vívni az UTC-ért, mert a programozók sem értik az időt.
Eredetileg azt írtad, hogy "UTC-ben kell TÁROLNI". Én ezt vitatom. Ettől valamiért elégge eltávolodtál az "érvelésedben" - amit azért "söprök le", mert semmi köze ahhoz, amit én mondok.
De ha neked jól esik, tárold UTC-ben, és miután betöltötted a DB-böl, írd oda, hogy if (datetime.now.isInDst) dt += timespan(1, 0, 0). Csak ne felejtsd el, mint a MÁV programozója :)
További szép estét!
Ne haragudj, de te nem látod át. Példa: 10-kor megy a vonat. Ma Magyarországon DST van, azaz UTC+2. Tegnap még UTC+1 voltunk.
Mégis mit tárolsz UTC-ben? Ha UTC 9:00-t, akkor tegnap UTC+1=10-kor ment, ma már viszont UTC+2=11-kor megy. Ha UTC 8:00-t, az ma 10-kor megy, de tegnap 9-kor ment volna. Azaz szarakodnod kell a DST-vel, hogy helyes időt kapj.
Az UTC abszolút idő, de a menetrendünk helyi, nem abszolút. A helyi időt helyi időben kell tárolni - mert az.
Én személy szerint minden indulásnak a pontos időpontját tárolnám. Az, hogy "minden nap kilenckor, kivéve a hónap utolsó csütörtökjét" amilyen förmedvények a menetrendben vannak néha, az nem tud egy stabil rendszer alapja lenni. Abban a pillanatban, amikor bekerül a rendszerbe, hogy tegnap kilenckor indult, meg az is bekerül a rendszerbe, hogy ma egy órával később, kilenckor indul, abban a pillanatban pontosan tudom, hogy ennek a helyi időnek mi az UTC megfelelője, azt tárolom le, és amikor előveszem számolgatni, akkor ezt a pontos időpontot fogom elővenni számolgatni. Amiből egyébként pontosan lehetne tudni, hogy adott időpontban DST van-e, csak szerencsére a számolgatáshoz nincs rá szükség.
Helyi időt azért nem tárolunk helyi időnként, mert csak egészen addig helyi idő, amíg ki nem derül róla, hogy ja, ez mégsem az. És soha sem az, a helyi idő csak egy social construct.
Fú, hát eléggé megbonyolítja, ahogy csinálni akarod: rengeteg adatod lesz, hatalmas redundanciával, amit mind kezelni kell és karban kell tartani (pl menetrend változáskor). De játsszunk el a gondolattal. Valóban, így végre működik az áhított UTC. De ki fogja felvinni minden vonat minden indulásának és minden állomásának minden időpontját? Marika néni? Gondolom (remélem) nem ez az ötlet. Akkor generálod valahogy? Miből? Csaknem egy sémából, hogy helyi idő szerint 10:00kor indul szombatonként? :) Minden út ide vezet. Plusz rengeteg teljesen átlagos operationt megbonyolítassz (pl múlt hét másolása jövő hétre - közben volt egy dst váltás - lehet varázsolni megint...)
A vonat helyi idő szerint közlekedik. Ez önmagában elég indok arra, hogy helyi időt tárolj. Való életben létező dolgokat a való életnek megfelelően kell modellezni, minden más bajhoz vezet. A kiskacsát is kiskacsaként tárolod, nem lúdként. Gyakorlatilag azt akarod nekem megmagyarázni, hogy tároljak egy intet stringként - alkalmas rá? Igen. Attól még érdemes? Nem. Mert mást jelent.
Mikor behúzod a DB-ből a "szombatonként 10 órá"-t, az nyilván önmagában haszontalan; bármilyen operation előtt "példányosítod" a napot, mellé rakod az adott nap dátumát és időzónáját, és hopp meg is van mindened a pontos számításhoz - csak DB redundancia nélkül. Ez se feltétlen UTC (de persze lehet az is, ez már az általad használt datetime lib implementációkának részletkérdése), de nagyjából erre gondolsz. Igazából ez az a pont, ahol te perzisztálnál még egyet, hogy adatbázisban is láhasd az UTC-t, én nem. Az ide vezető út meg ugyan az...
> rengeteg adatod lesz
ja. lesz. bár én olyan rendszerekhez vagyok szokva, ahol naponta több adat keletkezik, de oké.
> amit mind kezelni kell és karban kell tartani (pl menetrend változáskor)
egyébként akkor is, ha nem tárolod el az összes indulást egyenként (de egyébként úgyis eltárolod, mert ha bárki mással kell interfészelned, mint a Bivalybasznádon felszálló Kovács Joli néni akkor úgyis egyenként minden indulásról meg kell nekik mondani, hogy ez a vonat akkor most itt ekkor elindul, mert sem a Google Maps, sem az ÖBB nem fogja neked számontartani, hogy a tanszüneti napokon nem induló vonatnak most tanszünet van-e, vagy hogy a szombati munkanapáthelyezés az hétfőnek, pénteknek vagy szombatnak számít-e) szóval ha valami perverz mazochista oknál fogva nem tárolnád el az összes indulást egyenként, akkor minden nem-rendszerszintű változást (pl. ez a vonat most vágányzár miatt mindenhova öt perccel később ér oda) a feltételrendszeredben kell kezelned, ahelyett hogy egy SQL update az adott vonathoz tartozó timestampek módosításával pikk-pakk megoldaná.
> De játsszunk el a gondolattal
én mondjuk már fejlesztettem olyan rendszert, aminek több időzónát is támogatnia kellett eltérő időpontban váltott DST-vel nem játszásiból is, de persze hogyne, játszunk el.
> Csaknem egy sémából, hogy helyi idő szerint 10:00kor indul szombatonként? :)
de, abból. nem látom a humor forrását. (hazudok, látom. azt gondolod, hogy "naugyemegmondtam nekemvanigazam". valójában nem, mert továbbra is csak annyit állítok, hogy UTC-ben kellene tárolni az időpontokat.)
> Plusz rengeteg teljesen átlagos operationt megbonyolítassz (pl múlt hét másolása jövő hétre - közben volt egy dst váltás - lehet varázsolni megint...
```
Instant newWeeksTime = storedTime.atZone(ZoneId.of(zoneOfLocation))
.plusWeeks(1)
.toInstant();
```
nem látom a varázslatot. illetve ez Java, de feltételezem, hogy ez más nyelvekben is hasonlóan történik. mert a helyzet az, hogy az egész UTC egy 1961-es szabvány, szóval mire a számítógépek világába érkezett és 1970-ben a Unix timestamp számolása elindult már rég az egyetemlegesen elfogadott optimális módja volt az időpontok kezelésének. feltételezve, hogy nem vagy nyugdíjas, mire megszülettél minden ezzel kapcsolatosan felmerült kérdés már megoldott probléma volt.
> A vonat helyi idő szerint közlekedik.
amúgy nem. a vonat sajnos aszerint közlekedik ahogy a vasutasnak sikerül elindulnia. ez egyébként leginkább attól függ, hogy mi van a (telefonja) órájára írva, ami manapság legtöbbször egy NTP-vel atomidőhöz szinkronizált, majd szegény csórikámnak külön lefordított UTC timestamp.
> Ez önmagában elég indok arra, hogy helyi időt tárolj.
amúgy nem. még akkor sem lenne, ha aszerint közlekedne.
> Való életben létező dolgokat a való életnek megfelelően kell modellezni, minden más bajhoz vezet
Na akkor itt álljunk meg egy pillanatra, mert szerintem el kell magyaráznom, hogy mi is az az idő. Mert a valóságban az idő az nem más, mint a téridő egyik dimenziójának, aminek valami megmagyarázhatatlan okból kifolyólag hatása van az entrópia mértékének a változására, a szemlélő sebességéből illetve a környező gravitációs hatásokból adódó Lorentz-transzformációs torzulása. Ez van a való életben. Na ezt nem modellezzük így, mert sok értelme nincs, és amúgy is mindenki felvágná az ereit ha a kibaszott árapály jelenséget is bele kellene számolni a vonat indulásába.
Ezzel szemben az elmúlt 6000 évben az a szokás alakult ki, hogy a természet megfigyelésének megfelelően az entrópia változását abban mérjük, hogy periodikusan ismétlődő események "mikor" történnek. Azaz, hogy a nap délben delel. Történelmileg a nap mindig, mindenhol délben delelt, mert ez volt a definíciója. Ezért működött minden napóra. Ez még mindig elég közel van a valósághoz, lehetne is modellezni, tárolhatnánk az adatbázisban a napsugarak beesési szögét.
Aztán beütött a modern kor, és pont a vasút megjelenésével először a történelem folyamán előfordult olyan, hogy olyan gyorsan tudtak emberek egyik helyről a másikra eljutni, illetve a már fejlettebb óráiknak köszönhetően "vinni magukkal" az időt, hogy láthatóvá és problémássá vált, hogy aki Londonból érkezett Manchesterbe, annak más az idő mint aki mindig is Manchesterben élt. Úgyhogy kialakultak az időzónák annak modellezésére, hogy bár a valóság az, hogy délben van dél, de nálunk nem délben van dél, mi a Londoni/Pekingi, bármilyen délhez igazodunk. Aztán ezt még megfejeltük az óraátállításokkal, hogy még nagyobb legyen a káosz, de semmiképp sem azért, hogy közelebb kerüljünk a valóság modellezéséhez.
Nos ennek a káosznak a tetőpontján kezdtek el olyan rendszereket kidolgozni amik egységesen képesek kezelni az emberek időérzékelését. Ebből lett először a Greenwich Mean Time, majd újabban a Coordinated Universal Time.
Szóval nem a valóságot modellezzük, még csak az baszna be. Azt modellezzük, ami bizonyítottan legkevésbé problémás. Nem, ez nem azt jelenti, hogy az UTC-vel nincsenek problémák. Ez azt jelenti, hogy *nagyságrendekkel kevesebb* probléma van vele.
> A kiskacsát is kiskacsaként tárolod, nem lúdként [...] Gyakorlatilag azt akarod nekem megmagyarázni, hogy tároljak egy intet stringként
Nem. Ha már duck typing, akkor azt akarom megmagyarázni, hogy egy fix időpont tulajdonságaival rendelkezik, és fix időponként kell vele számolni, és fix időpontként hápog, azt fix időpontként tároljuk. De ha már a te hasonlatod... én pont hogy (long) intként tárolnám, te akarsz behozni ilyen csak stringként leírható "minden hét keddjén, kivéve pünkösd után" csavarokat.
> de nagyjából erre gondolsz.
pontosan. örülök, hogy megérkeztünk.
> Igazából ez az a pont, ahol te perzisztálnál még egyet, hogy adatbázisban is láhasd az UTC-t, én nem.
nem, én az egész előtt perzisztálnék egyet, hogy minden elve UTC-ben legyen. és nem azért, mert én ilyen nagy számokat szeretek olvasgatni, mint a 1774890420 (sőt a legtöbb adatbázis-kezelő tool a timestampeket lefordítja olvasható dátum-idővé) hanem mert ez biztosítja, hogy amikor egy timestamphez hozzányúlunk, az minden szükséges információt tartalmaz ami az értelmezéséhez szükséges. ezért aztán amíg relativisztikus hatások nem érvényesülnek, az UTC-t csak expliciten szánt szándékkal lehet elbaszni. nekem meg már PTSD-m van az olyan fejlesztőktől akik hely és idő megjelenítése nélkül szórnak bele időpontokat az adatbázisba, mert hát az ő kódjuk ezt tudja kezelni egész addig amíg meg nem változtatják, én meg mikor használnám az adatokat, akkor egy hónapot töltök az adattisztítással, azt túrva, hogy hogyan változott emberünk kódja a kérdéses tárolt időszakban többször, úgy hogy a kód egyébként több időzónában futott és közben mindegyikben volt DST átállás is.
> Az ide vezető út meg ugyan az...
nem. az az út amit te leírsz gyanúsan hasonlít arra a másikra, amelyik jószándékkal van kikövezve. az én személyes tapasztalatom, hogy az ignoranciával kikövezett út is szenvedéshez vezet.
Elbeszélsz mellettem, szőnyeg alá söpröd a mondanivalóm lényegét, és közben kiforgatod a szavaimat. A munkahelyeden is ez az érveléstechnikád?
> Csaknem egy sémából, hogy helyi idő szerint 10:00kor indul szombatonként? :)
Azért szomorú, hogy ezt a szőnyeg alá söpörted, mert ez a lényeg. A te "megoldásodban" ez a "séma" az, ahol "minden vasárnap 10 óra" jellegű az adat, azaz nem naphoz köthető. Erről mondtam már a legelején is, hogy helyi időben kell tárolni; mert UTC-ben értelmezhetetlen. Az általad javasolt "megoldás" pedig nem megoldotta ezt, hanem szimplán elfelejtette. Elismerted, hogy kell a generáláshoz, de azóta se oldottad meg ennek az információnak a zökkenőmentes UTC beli tárolását, e helyett beszélsz minden másról. Mivel nem tudod ráhúzni az UTC-t, ezért próbálsz nem tudomást venni róla.
Ehelyett elmondtad, hogy az ebből a sémából (menetrendből) származtatott konkrét időpontokat (dátum, idő, időzóna) UTC-ben tárolnád. Erről ódákat zengsz, pedig nem vitattam azt, hogy ezt UTC-ben kell modellezni, sőt, megerősítettem, és megerősítem újra: az UTC egy abszolút időpont, ez pedig ennek megfelel. Itt azt vitattam, hogy kell-e egyáltalán tárolni, hiszen származtatott adat. Redundáns, egyszerűen számítható, és csak bonyolítja a rendszert a tárolása; _de ez már egy másik téma, az előzőtől független_.
A java snippetedre válaszul: igen, ez varázslás. Tök mindegy, hogy hány sor, mindenki tud kódolni, nem erről van szó - hanem arról, hogy az adott developernek eszébe jut-e egyáltalán megírni ezt a kódot. Azért igyekszünk egyszerűsíteni a rendszert, hogy kevesebb dolgot kelljen fejben tartani. Arról nem is beszélve, hogy a "hét másolása a következő hétre" egy olyan op, amire csak azért van szükség, mert redundáns adatot tárolsz - ha a menetrendből (semából) generálod az adatot, mindig tudod a legújabb változatát generálni, és a menetrend adatának szerkesztése, bővítése nagysagrendekkel egyszerűbb komplexitású feladat lesz.
A téridőről szóló elmélkedésedre nem reagálok, mert teljesen irreleváns, és csak a szavaim fölösleges, politikai jellegű kiforgatása.
Mivel látom, hogy nem tudsz a tények mentén vitatkozni, én ezzel befejezettnek tekintem. További szép estét.
Ez nem igaz így hogy az UTC tárolni jó. Nem..
Attól függ, hogy egy időpillanatod vagy idő pontod van (magyarul nem annyira jön elő, de gyakorlatilag ha az "új" java time api-t megérted akkor már egész jó vagy -- minden valamire való datetime lib ezt másolta le). Tehát van az Instant, ahol csak a világegyetem egy adott időpillanatát veszed ami az ufóknak is ugyanaz mint neked (jó, lehet a fénysebességgel utazóknak nem, ezt nem tudom). Arra hogy a vonat mikor indult el valóban ez egy jó adattipus. (De note: ez egy már megtörtént esemény rögzítése)
Illetve ettől teljesen függetlenül vannak különböző _DateTime-ok , pl local vagy egy adott idozonaval.
Ezek egy emberi szempontból releváns időt fejeznek ki. Ha ki kell írni hogy mikor jön a vonat, azt így kell kiírni. De ugyanúgy ha a MÁV egy új vonatot tervez indítani ami minden nap 15:00-kor fog indulni, ott már loszarra se mész az UTC-vel/Instant-tal
A [másik kommentemet](https://www.reddit.com/r/programmingHungary/comments/1s6os78/comment/odc1vtt/) szintén neked itt annyival egészíteném ki, hogy személy szerint nekem nem tetszik a Java time API-ban (leánykori nevén Joda-time, igen ennyire öreg vagyok) hogy létezik benne `LocalDate` meg `LocalDateTime`, amiknek semmi értelme. `LocalTime` van, mert különböző helyeken emberek különböző módon írják az időt, rendben. De a dátum az dátum. Az csak azért van, hogy ha konkrét `Instant` kell, akkor le tudjam szűkíteni, hogy melyik nap adott óra-percéről beszélek, mert hogy ott ugye nem mindegy. Erre a "furfangos" programozók gyakorlata az, hogy belebasznak mindent `LocalDateTime`-ba, időzónát, mindent telibeszarva, (már jó esetben, mert így legalább esélyük megvan jó eredményt kapni, egyébként csak a régi jó `new Date()` jóvanazúgy) aztán majd lesz vele valami valahogy. Hát lesz. És igen, láttam már programozót recurring eventet (a teljes sorozatot) konkrét `LocalDateTime`-ként tárolva meglepődött fejet vágni, hogy hát mi baszódhatott el mikor másik időzónából használták a rendszert.
Nagyon szívesen röhögnék rajtad, de az eddigi tapasztalatom az, hogy tök normális emberek is beleesnek ebbe a csapdába, hogy majd a UTC mindent megold.
Gépeknél működik, de a hús-vér felhasználót csak a helyi idő érdekli. Az óra átállítás, mindig is problémás lesz.
hadd idézzem a klasszikust: https://www.youtube.com/watch?v=-5wpm-gesOY
különösen fontos rész amit a végén mond: "What you learn after dealing with time zones, is that what you do is you put away your code you don't try and write anything to deal with this. You look at the people who have been there before you. You look at the first people, the people who have dealt with this before, the people who have build the spaghetti code, and you go to them, and you thank them very much for making it open source, and you give them credit, and you take what they have made and put it in your program and you never ever look at it again. *Because that way lies madness.*"
sz'al ja. az UTC a tárolást oldja meg. a megjelenítést a rendszerbe beépített tzdata oldja meg. és azok a kollégák akik olyan kurva okosnak képzelik magukat, hogy ők majd jobban tudják hogyan kell a kereket újra feltalálni, azoknak továbbra is a kurva anyját.
A személyeskedés ütközik a sub szabályaival és a Reddit első szabályával, ezért eltávolítottuk! Kérünk, hogy posztolás előtt nézd át az r/programmingHungary és a Reddit szabályait!
Personal attacks and harrassment violates the sub rules and the 1st rule of Reddit, therefore it has been removed. Please go through the rules of r/programmingHungary and Reddit before posting again!
Nekem rögtön lesz problémám, ha épp helyi idő szerint kell a következő napot meghatározni, és egy órás bontást létrehozni, ami óraátállításkor lehet 23 vagy 25 óra. Tárolni ekkor is utct tárolunk, de már a mögöttes számoláshoz is helyire kell alakítani, nem elég csak a mutogatásra átalakítani.
Értem, de ezekre az edge-case esetekre is van már rég megoldás, nem kell feltalálni újra a meleg vizet, ha naptár szerint kell valamit definiálni, iterálni, akkor az local date/time számolást igényel, de ezt lekezeli a naptár library.
Nem mondtam, hogy meg kell írni kézzel, természetesen megírt libraryk jól kezelik.
Attól még az az állítás, hogy minden problémát megold az, ha minden számítást utcben csinálsz, és csak a felhasználófelé-mutatáskor alakítod helyi idővé, nem igaz.
Az órát nem érdekli a helyi idő szerinti következő nap, a CPU-t sem, csak a felhasználót. Ilyen szempontból az admin is felhasználó. Az én szótáram szerint egy ilyen számítás a "felhasználó felé" megy vagy a "felhasználó felől" jön.
El kell jutnia a rendszer felé is, hogy ezeket az órákat generáld le, esetleg egy gépi tanuló modell felé, hogy a helyi reggel 8, most utc 6, nem az utc 7, tehat a gyár fogyasztása ekkor fog megugrani (mert az emberek a gyárban a helyi idő szerint dolgoznak).
ja. el.
(mellesleg én nagyon adnám, hogy ha az emberek nem helyi idő szerint dolgoznának, semmi értelme. és ezt is évente kétszer óraátállításkor ki szoktam fejteni az interneten is, meg a személyesen panaszkodó nem informatikus ismerőseimnek is, ezt sem szokta soha felfogni senki.)
Oke, írsz egy calendar appot, amiben a felhasználó beállítja hogy minden hétfő reggel 8 van egy meetingje.
Akkor mit csinálsz, UTC + hozzáadsz 7*24*60*60 mp-et? Mert ha előző héten állította be akkor már egy órával el vagy csúszva
Én konkrétan 6 éve fejlesztek naptár appot... :D
Szóval meg kell nézni az RFC 2245 és RFC 5545 specifikációt, abban ez szépen le van írva, hogy a recurring event hogy kezelendő. Ilyenkor sem konkrét local dátumot tárolsz le, hanem egy kezdő dátumot UTC-ben, egy recurring szabályt, így minden időzónában jól fog megjelenni és egy honos időzónát, amiben a naptáresemény megjelenítési időpontja látszódni fog, transitions rules-al, hogy mit kell csinálni, ha nem létező intervallumban kellene megjeleníteni. És az, hogy hova kell rajzolni a naptáreseményt az adott napon belül, az megjelenítési kérdés.
De ha jobban szeretnéd, akkor átfogalmazom úgy, hogy 99,9 százalékban nem lesz problémád UTC tárolással és számolással, a maradék 0,1 százalék meg olyan edge case, aminek van több évtizedes szakirodalma és ha nem niche alkalmazást fejlesztesz, akkor nem is találkozol ilyen problémával.
Már bocsánat, de önmagában az UTC se oldja meg, sőt.
Más ha egy időpillanatra vagy kíváncsi és más ha egy emberek által megbeszélt időpontról van szó.
Pl a minden nap 8 órakorra *nem* megfelelő az UTC.
Egy pár szálban már leírtam, de leírom megint. Annyit állítottam, hogy UTC-ben kellene tárolni minden időt. Igen, ezalatt valóban az időpontokat értettem. Ezt valamelyik alszálban kiegészítettem azzal, hogy szerintem számolni is mindig UTC-ben kellene, ezt is tartom továbbra is. Igen, a "minden nap 8 órakor"-t nem tudja az UTC prezentálni, de a MÁV-nak se a "minden nap 8 órakor indul" alapján kellene számolnia a késést, hanem a "ma 01:00-kor terveztük hogy indul Bécsből, ehelyett 01:05-kor indult, 02:00-kor volt egy óraátállítás, és Záhonynál 14:32-kor átlépett egy másik időzónába" alapján.
TV adáslebonyolítóban ülök. Az adásautomatizáló szoftver fejlesztői úgy gondolták jó ötlet a local time-hoz kötni a vezérlést. Minden adásba kerülő anyag egy-egy event ami akkor élesedik amikor a kezdési ideje és a rendszeridő találkozik. Mikor egy órát előreállítunk akkor átugrana az egy órával későbbi reklám/promó akármi blokkba, mikor vissza állítunk akkor az épp futó anyag végén megvárná míg odaér az idő....ki lett találva hogy játsszuk ki, de ez minden óraállításnál egy extra éjszakai műszak, amit alvással is tölthetnék, ha UTC-re menne a vezérlés, a UI-re megjelenített időkhöz meg hozzáadna annyit amennyit beállítunk.
Csak azért írtam mert más cégnél ismerem a rendszert, ott éjjel váltáskor át kell írni a +01:00-t +02:00-ra, és már oda számol minden ahova kell. Nekem meg fél oldalas checklist-em van ehhez a spanyol remekhez :)
Nézd, az egyik hobby-projektem egy naptár alkalmazás, na, ott vannak még nagyobb kibaszások, például abban, hogy melyik az év első hete.
Van az ISO, ami szerint az év első hete az, amelyik tartalmazza január 4-ét és az év utolsó hete ilyenkor nem 52. vagy 53. hét, hanem az első hét.
Van az amerikai rendszer, ami szerint az az első hét, amiben benne van január elseje, az év utolsó hete és a következő év első hete nem ugyanaz a sorszám.
Van a közel-keleti rendszer, amiben ad-hoc a hét számozása. És van még pár kis ország, ahol van valami saját rendszerük.
Ehhez képest az óraátállítás és a helyi idő sima liba.
Idonel mar csak a datum rosszabb (bloeee). Van egy rendszerunk, amiben modultol fugg h europai v amerikai v ISO a datumforma. Szivlapattal csapkodnam aki ezt hagyta, de mar sajna elment.
A legszebb: "MÁV: Informatikai hiba miatt nem állt át az óra a rendszerben, senkinek nem kell visszafizetnie a tévesen utalt késési biztosítást"
Teli vagyunk pénzzel, hogy így szórjuk.
64 Comments
No_Reputation_1727@reddit
No_Tip2498@reddit
nulloid@reddit
gaborauth@reddit
Boba0514@reddit
ytg895@reddit
akosh_@reddit
ytg895@reddit
akosh_@reddit
ytg895@reddit
akosh_@reddit
ytg895@reddit
akosh_@reddit
ytg895@reddit
akosh_@reddit
ytg895@reddit
akosh_@reddit
ytg895@reddit
akosh_@reddit
ytg895@reddit
akosh_@reddit
Ok-Scheme-913@reddit
ytg895@reddit
Equivalent-Role-6130@reddit
ytg895@reddit
deleted_by_reddit@reddit
programmingHungary-ModTeam@reddit
gaborauth@reddit
Tasty-Rent7138@reddit
gaborauth@reddit
Tasty-Rent7138@reddit
ytg895@reddit
Tasty-Rent7138@reddit
ytg895@reddit
Ok-Scheme-913@reddit
gaborauth@reddit
Equivalent-Role-6130@reddit
gaborauth@reddit
Ok-Scheme-913@reddit
ytg895@reddit
Necessary-Ad-3236@reddit
ytg895@reddit
Necessary-Ad-3236@reddit
ompoly@reddit
Dana2400@reddit
intercisa@reddit
Dana2400@reddit
intercisa@reddit
ytg895@reddit
gaborauth@reddit
gaborauth@reddit
Profvarg@reddit
gaborauth@reddit
Necessary-Ad-3236@reddit
kindlyneedful@reddit
charlie_hun@reddit
zseliakiraly@reddit
Tradizar@reddit
No_Reputation_1727@reddit
TinyCuteGorilla@reddit
mykeesg@reddit
hex64082@reddit
tbazsi95@reddit
IguessUgetdrunk@reddit