Već sam otprilike šest godina profesionalni programer. Tijekom tih šest godina nikada nisam radio za tvrtku ili na projektu koji se u nekom obliku nije borio s datumima i vremenom.



Gotovo svaka aplikacija na kojoj ćete raditi zahtijeva korištenje vremena na neki način, što znači da ćete u određenom trenutku morati prikupiti, pohraniti, dohvatiti i prikazati datume ili vremena. Ne postoji srebrni metak za bavljenje datumima ili vremenima i nikada ne možete izbjeći urođenu složenost koja dolazi s našim konceptom vremena, ali postoje koraci koje ćete poduzeti kako biste mu olakšali bol.



U godinama u kojima radim s vremenom na različitim programskim jezicima, otkrio sam da sljedeća znanja idu daleko.

Odabir pravog formata podataka

Prvi korak u radu s vremenima i datumima je odabir prikaza podataka. Iako se različiti formati mogu činiti više-manje jednaki, format koji odaberete imat će velik utjecaj na način pisanja i otklanjanja pogrešaka u kodu.

Korištenje numeričke vremenske oznake kada vam je potreban datum značit će raščlanjivanje vremenske oznake datuma i dohvaćanje datuma iz nje, što može, ali ne mora biti jednostavno, ovisno o vremenskoj zoni.


21 u numerologiji

Upotreba prilagođenog niza za predstavljanje raspona vremena čini se jednostavnim za pohranu i manipulaciju, ali je teško postaviti upit. Uz to, upotreba bilo koje vrste reprezentacije koju ljudsko oko ne prepozna odmah, otežat će otklanjanje pogrešaka u vašem kodu.

Pri odabiru formata za datume ili vremena pridržavam se sljedećih pravila:



  1. Nikada ne koristite numeričke vremenske oznake. Često ih je najlakše dobiti u standardnim knjižnicama među raznim programskim jezicima, ali nisu čitljivi ljudima i iskušenje da se njima manipulira prejako je.
  2. Pridržavajte se ISO 8601 , standard koji definira format podataka povezanih s datumom i vremenom. Trivijalno je pronaći knjižnicu za bilo koji jezik koji se može nositi s varijacijama ISO 8601.
  3. ISO 8601 je standard, ali ima mnogo varijacija. Uvijek biste trebali odabrati čovjeku najčitljiviju varijantu ISO 8601. To ne zahtijeva dodatni napor, ali olakšava otklanjanje pogrešaka.
  4. Niz vremenske oznake trebao bi sadržavati samo podatke koji su vam apsolutno potrebni. Kada radite s vremenom, vaš niz ne bi trebao sadržavati datum, a kada radite s datumom koji je agnostički vremenske zone, vaš niz ne bi trebao sadržavati vremensku zonu. Dodavanje dodatnih informacija dodaje dvosmislenost operaciji raščlanjivanja i namjeri podataka za buduće programere
  5. Prilikom pohrane vremenskih zona uvijek se normalizirajte na istu vremensku zonu u vremenskim oznakama. To ne samo da računalu olakšava sortiranje i obradu podataka, već olakšava i ljudskom programeru.

Pridržavanje ovih pravila neće vas puno koštati unaprijed, ali olakšat će vam život kad se prijava uspostavi i kad utvrdite da vaša upotreba vremena i datuma nije ono što ste očekivali.

Odabir pravog alata

Kao i kod većine problema u našoj industriji, rukovanje vremenom i datumima svodi se na odabir pravog alata za posao.

Primamljivo je koristiti alate u standardnoj biblioteci vašeg omiljenog jezika, ali to možda nije najbolji izbor. Iako neke standardne knjižnice imaju fantastične značajke datuma i vremena (Python), druge su sasvim jadne (Javascript). Korištenje pogrešnog alata znatno otežava razvoj značajki temeljenih na vremenu i olakšava umetanje programskih pogrešaka u vašu aplikaciju.



Dobra biblioteka za rukovanje datumima i vremenima omogućit će vam da slijedite 5 gore spomenutih pravila. Točnije, trebao bi biti u stanju:

  • Analizirajte bilo koji prikaz datuma na koji biste mogli naletjeti (uključujući vanjske prikaze.)
  • Izlaz na bilo koji datumski prikaz koji će vam trebati (uključujući vanjske reprezentacije.)
  • Manipulirajte datumima i vremenima dodavanjem ili oduzimanjem jedinica vremena od njih.
  • Usporedite datume i vremena.
  • Ispravno pretvaranje između vremenskih zona.

Važno je da vaša knjižnica podržava ove značajke, inače će iskušenje da sami pokušate implementirati funkciju biti previsoko. I samo da budemo jasni, ako sami pokušate implementirati bilo koju od tih funkcija, nećete uspjeti.

Ne raščlanjujte vlastite vremenske oznake regularnim izrazima, nemojte dodavati sekunde numeričkoj vremenskoj oznaci jer se čini kao normalan broj i ne uspoređujte datume i vremena pomoću operatora jednakosti. Te knjižnice postoje jer je te probleme teško riješiti, a ponovno otkrivanje kotača u vašoj aplikaciji ostavit će vam slomljeni kotačić.

U nastavku imam nekoliko prijedloga za knjižnice koje odgovaraju ovim kriterijima:

Jezik Knjižnica
Piton Standardna knjižnica
Javascript Trenutak i Vremenska zona trenutka
Java 8 i novije verzije Standardna knjižnica (java.time)
Java 7 i novije verzije Joda-Time
Brz SwiftDate

Ako vaš jezik nije na popisu (jer ga nisam dovoljno upoznat), potražite biblioteku datuma i vremena. Šanse su da ćete pronaći dobru biblioteku koja će obaviti sve što vam treba.

Znajući o vremenu

Posljednji dio znanja koji moram podijeliti nije specifičan za rad s datumima i vremenima, već je više općenita filozofija koja nam pomaže izbjeći probleme i odnosi se na rukovanje datumom i vremenom koliko i na svaki drugi problem u programiranju .

Uvijek provjerite svoje pretpostavke.

Svakom predstavljenom problemu pristupamo s velikim brojem znanja i još većim brojem pretpostavki. Prilikom rukovanja datumima i vremenima važnije je nego ikad prije provjeriti svoje pretpostavke kako biste bili sigurni da i dalje vrijede za vaš scenarij.

Ovaj popis , pod nazivom Lažni programeri vjeruju u vrijeme, daje mnogo izvrsnih primjera koji ilustriraju da vrijeme vjerojatno nije ono što ste mislili. Kada dizajnirate ili razvijate značajku koja se usredotočuje na vrijeme, potičem vas da zgrabite partnera i prođete kroz ovaj popis osiguravajući da ste izbjegli navedene zamke.

Vremenske greške je notorno teško uhvatiti, a još ih je teže testirati. Ako se budete razvijali imajući na umu ovaj popis, možda ćete moći izbjeći suptilne bugove koji bi utjecali na vaše kupce, ali ih možda neće uhvatiti (najgora vrsta bugova!)

Vremenske zone

Nijedna rasprava o vremenima ili datumima ne bi bila potpuna bez spominjanja vremenskih zona. Osim što ste se upoznali s gore navedenim uobičajenim neistinama, upoznajte se i s osnovama vremenskih zona.

Vremenske zone neprestano će predstavljati bol u radu s vremenom, čak i ako mislite da ih imate 'sve skupa'. Znanje o vremenskim zonama pomoći će vam da usredotočite svoje razmišljanje i osigurati da ne napravite logičke pogreške prilikom manipuliranja vremenom.

Nažalost, ne postoji način da se u potpunosti izbjegnu poteškoće pohrane i manipulacije vremenima i datumima tijekom programiranja. Ali ako slijedite ove korake i radite s tim znanjem na umu, možete si olakšati zadatak smanjivanjem količine koda koji morate napisati i prisiljavanjem na paradigme za koje je manja vjerojatnost da će uzrokovati probleme.

Podijelite Sa Svojim Prijateljima: