Že približno šest let sem profesionalni razvijalec. V teh šestih letih še nikoli nisem delal za podjetje ali projekt, ki se v neki obliki ni boril z datumi in časi.



Skoraj vsaka aplikacija, s katero boste delali, na nek način zahteva čas, kar pomeni, da boste morali v določenem trenutku zbrati, shraniti, pridobiti in prikazati datume ali ure. Za spoprijemanje z datumi ali časi ni nobene srebrne krogle in nikoli se ne morete izogniti lastni zapletenosti, ki jo prinaša naš koncept časa, vendar lahko z nekaj koraki poskrbite, da bo bolečina manjša.



V letih, ko delam s časom v različnih programskih jezikih, sem ugotovil, da gre naslednje znanje zelo daleč.

Izbira prave oblike zapisa podatkov

Prvi korak pri delu s časi in datumi je izbira predstavitve vaših podatkov. Čeprav se zdijo različne oblike bolj ali manj enake, bo izbrana oblika močno vplivala na to, kako pišete in odpravljate napake v svoji kodi.

Uporaba številskega časovnega žiga, ko potrebujete datum, bo pomenila razčlenitev časovnega žiga in pridobivanje datuma iz tega, kar je lahko ali pa tudi ne glede na časovni pas.


videti številko 2

Uporaba niza po meri za predstavitev časovnega obdobja se zdi enostavna za shranjevanje in upravljanje, vendar je težko povpraševati. Poleg tega bo uporaba kakršnih koli predstavitev, ki jih človeško oko ne prepozna takoj, otežila razhroščevanje kode.

Pri izbiri oblike za datume ali ure se držim naslednjih pravil:



  1. Nikoli ne uporabljajte številskih časovnih žigov. Pogosto jih je najlažje dobiti v običajnih knjižnicah med različnimi programskimi jeziki, vendar jih ljudje ne berejo in skušnjava, da bi z njimi manipulirali, je premočna.
  2. Spoštujte ISO 8601 , standard, ki določa obliko podatkov, povezanih z datumom in časom. Trivialno je najti knjižnico za kateri koli jezik, ki bo kos različicam ISO 8601.
  3. ISO 8601 je standard, vendar ima veliko različic. Vedno morate izbrati človeku najbolj berljivo različico ISO 8601. To ne zahteva dodatnih naporov, olajša pa odpravljanje napak.
  4. Niz časovnega žiga naj vsebuje samo podatke, ki jih nujno potrebujete. Pri delu z urami niz ne sme vsebovati datuma, pri delu z datumom, ki je agnotičen za časovni pas, pa niz ne sme vsebovati časovnega pasu. Dodajanje dodatnih informacij dodaja dvoumnost operaciji razčlenjevanja in namenu podatkov za prihodnje razvijalce
  5. Ko shranjujete časovne pasove, se v časovnih znamkah vedno normalizirajte na isti časovni pas. To ne samo, da računalnik lažje razvršča in obdeluje podatke, temveč tudi človeškemu razvijalcu.

Upoštevanje teh pravil vas vnaprej ne bo stalo veliko, vendar vam bodo olajšali življenje, ko bo vaša prijava vzpostavljena in boste ugotovili, da vaša uporaba časov in datumov ni takšna, kot ste pričakovali.

Izbira pravega orodja

Kot pri večini težav v naši panogi tudi pri rokovanju z datumom in časom izberemo pravo orodje za svoje delo.

Skušnjava je uporabljati orodja v standardni knjižnici vašega najljubšega jezika, vendar to morda ni najboljša izbira. Medtem ko imajo nekatere standardne knjižnice fantastične funkcije datuma in časa (Python), so druge naravnost žalostne (Javascript). Z napačnim orodjem je veliko težje razviti funkcije, ki temeljijo na času, in napakam lažje zdrsne v vašo aplikacijo.



Dobra knjižnica za obdelavo datumov in ure vam bo omogočila, da upoštevate 5 zgoraj omenjenih pravil. Natančneje, mora biti sposoben:

  • Razčlenite katero koli predstavitev datuma, na katero lahko naletite (vključno z zunanjimi predstavitvami.)
  • Izpis za katero koli predstavitev datuma, ki jo boste morda potrebovali (vključno z zunanjimi predstavitvami.)
  • Z datumi in urami manipulirajte tako, da od njih seštevate ali odštevate enote časa.
  • Primerjajte datume in ure.
  • Pravilno pretvori med časovnimi pasovi.

Pomembno je, da vaša knjižnica podpira te funkcije, sicer bo skušnjava, da bi poskusili sami implementirati funkcionalnost, previsoka. In samo, da razjasnimo, če boste poskušali katero od teh funkcij implementirati sami, vam ne bo uspelo.

Ne razčlenjujte lastnih časovnih žigov z regularnimi izrazi, ne dodajajte sekund številskemu časovnemu žigu, ker se zdi normalno število, in ne primerjajte datumov in časov z operatorjem enakosti. Te knjižnice obstajajo, ker je te težave težko rešiti in znova izumiti kolo v vaši aplikaciji vam bo samo ostalo z zlomljenim kolesom.

Spodaj imam nekaj predlogov za knjižnice, ki ustrezajo tem merilom:

Jezik Knjižnica
Python Standardna knjižnica
Javascript Trenutek in Časovni pas trenutka
Java 8 in novejše različice Standardna knjižnica (java.time)
Java 7 in starejši Joda-Time
Hitro SwiftDate

Če vašega jezika ni na seznamu (ker ga ne poznam dovolj), poiščite knjižnico datumov in ure. Verjetno boste našli dobro knjižnico, ki bo naredila vse, kar potrebujete.

Vedeti o času

Končni del znanja, ki ga moram deliti, ni specifičen za delo z datumi in časi, ampak je bolj splošna filozofija, ki nam pomaga, da se izognemo težavam, in velja za rokovanje z datumom in časom enako kot za vse druge težave pri programiranju .

Vedno preverite svoje predpostavke.

K vsakemu predstavljenemu problemu pristopimo z veliko znanja in še več predpostavk. Pri ravnanju z datumi in časi je bolj kot kdaj koli prej pomembno, da preverite svoje predpostavke in se prepričate, da še vedno držijo vašega scenarija.

Ta seznam z naslovom Falsehoods Programmers Believe About Time ponuja veliko odličnih primerov, ki ponazarjajo, da čas verjetno ni tisto, kar ste mislili. Ko načrtujete ali razvijate funkcijo, ki se osredotoča na čas, vam priporočam, da vzamete partnerja in si ogledate ta seznam, da se izognete naštetim pastem.

Časovne napake je zelo težko ujeti in še težje preizkusiti. Če se razvijate s tem seznamom, se boste morda lahko izognili prefinjenim napakam, ki bi vplivale na vaše stranke, vendar jih morda ne bi ujeli (najslabša vrsta napak!)

Časovni pasovi

Nobena razprava o urah ali datumih ne bi bila popolna brez omembe časovnih pasov. Poleg tega, da se seznanite z zgoraj naštetimi pogostimi lažmi, se seznanite tudi z osnovami časovnih pasov.

Časovni pasovi bodo pri delu s časom nenehno boleči, tudi če mislite, da jih imate 'vse ugotovljeno'. Če boste imeli nekaj znanja o časovnih pasovih, boste lažje usmerili svoje razmišljanje in zagotovili, da pri manipulaciji s časom ne boste naredili logičnih napak.

Na žalost se nikakor ne moremo popolnoma izogniti težavam pri shranjevanju in manipuliranju časov in datumov pri programiranju. Če pa sledite tem korakom in delate s tem znanjem, si lahko nalogo olajšate tako, da zmanjšate količino kode, ki jo morate napisati, in se prisilite v paradigme, ki manj verjetno povzročajo težave.

Delite S Prijatelji: