Esmu bijis profesionāls izstrādātājs apmēram sešus gadus. Šo sešu gadu laikā es nekad neesmu strādājis uzņēmumā vai projektā, kas kaut kādā veidā necīnījās ar datuma un laika jautājumiem.





Gandrīz katrai lietojumprogrammai, kurā strādājat, kaut kādā veidā ir jāizmanto laiks, kas nozīmē, ka kādā brīdī jums būs jāapkopo, jāuzglabā, jāatgūst un jāparāda datumi vai laiki. Datumu vai laiku apstrādei nav sudraba lodītes, un jūs nekad nevarat izvairīties no raksturīgās sarežģītības, kas saistīta ar mūsu laika jēdzienu, taču ir daži soļi, kurus varat veikt, lai padarītu to mazāk sāpīgu.



Gados, kad esmu strādājis ar laiku dažādās programmēšanas valodās, es atklāju, ka šādas zināšanas ir ļoti tālu.



Pareiza datu formāta izvēle

Pirmais solis, strādājot ar laikiem un datumiem, ir datu atveidojuma izvēle. Lai gan dažādi formāti var šķist vairāk vai mazāk vienādi, izvēlētajam formātam būs liela ietekme uz koda rakstīšanu un atkļūdošanu.

Skaitliska laika zīmoga izmantošana, kad jums nepieciešams datums, nozīmēs datēšanas laika zīmoga parsēšanu un datuma iegūšanu no tā, kas var būt vai nevar būt vienkāršs atkarībā no laika joslas.


eņģeļu numuri 949

Pielāgotas virknes izmantošana, lai attēlotu laika posmu, šķiet viegli glabājama un manipulējama, taču to ir grūti vaicāt. Turklāt jebkura veida attēlojuma izmantošana, ko cilvēka acs nav uzreiz atpazīstama, apgrūtinās koda atkļūdošanu.



Izvēloties datumu vai laiku formātu, es ievēroju šādus noteikumus:



  1. Nekad nelietojiet ciparu laika zīmogus. Bieži vien tos ir visvieglāk iegūt standarta bibliotēkās starp dažādām programmēšanas valodām, taču tie nav cilvēkiem lasāmi, un kārdinājums ar tiem manipulēt ir pārāk spēcīgs.
  2. Ievērot ISO 8601 , standarts, kas nosaka ar datumu un laiku saistītu datu formātu. Ir triviāli atrast bibliotēku jebkurai valodai, kas spēj apstrādāt ISO 8601 variantus.
  3. ISO 8601 ir standarts, taču tam ir daudz variāciju. Jums vienmēr jāizvēlas cilvēka lasāmākais ISO 8601 variants. Tas neprasa papildu pūles, bet atvieglo atkļūdošanu.
  4. Laika zīmoga virknē jābūt tikai tiem datiem, kas jums absolūti nepieciešami. Strādājot ar laikiem, virknē nedrīkst būt datums, un, strādājot ar datumu, kas ir laika joslas agnostisks, virknē nedrīkst būt laika josla. Papildu informācijas pievienošana palielina neskaidrību parsēšanas operācijā un datu nodomā nākamajiem izstrādātājiem
  5. Uzglabājot laika joslas, jūsu laika zīmogos vienmēr normalizējiet to pašu laika joslu. Tas ne tikai atvieglo datora datu šķirošanu un apstrādi, bet arī cilvēka izstrādātājam.

Ievērojot šos noteikumus, jums jau iepriekš nebūs jāmaksā daudz, taču tie atvieglos jūsu dzīvi, kad tiks izveidota jūsu lietojumprogramma un jūs atradīsit, ka laika un datumu izmantošana nav tā, kā jūs gaidījāt.

Pareiza rīka izvēle

Tāpat kā lielākajā daļā problēmu mūsu nozarē, laika un datuma apstrāde ir atkarīga no pareizā instrumenta izvēles šim darbam.



Ir vilinoši izmantot rīkus jūsu iecienītākās valodas standarta bibliotēkā, taču tā var nebūt labākā izvēle. Kaut arī dažās standarta bibliotēkās ir fantastiskas datuma un laika funkcijas (Python), citas ir tieši nožēlojamas (Javascript). Izmantojot nepareizu rīku, ir daudz grūtāk izstrādāt funkcijas, kas balstītas uz laiku, un tas atvieglo kļūdu iekļūšanu jūsu lietojumprogrammā.



Laba bibliotēka datumu un laika apstrādei ļaus ievērot 5 iepriekš minētos noteikumus. Konkrēti, tai vajadzētu būt iespējai:



  • Parsējiet jebkuru datuma attēlojumu, ar kuru varat saskarties (ieskaitot ārējos attēlojumus).
  • Izeja uz jebkuru datuma attēlojumu, kas jums var būt nepieciešams (ieskaitot ārējos attēlojumus).
  • Manipulēt ar datumiem un laikiem, no tiem saskaitot vai atņemot laika vienības.
  • Salīdziniet datumus un laikus.
  • Pareizi konvertējiet starp laika joslām.

Ir svarīgi, lai jūsu bibliotēka atbalstītu šīs funkcijas, pretējā gadījumā kārdinājums pats mēģināt ieviest funkcionalitāti būs pārāk liels. Un tikai, lai būtu skaidrs, ja jūs pats mēģināt ieviest kādu no šīm funkcijām, jums neizdosies.

Nepārsijiet savus laika zīmogus ar regulārām izteiksmēm, nepievienojiet sekundes skaitliskajam laika zīmogam, jo ​​tas šķiet normāls skaitlis un nesalīdziniet datumus un laikus, izmantojot vienlīdzības operatoru. Šīs bibliotēkas pastāv, jo šīs problēmas ir grūti atrisināt, un riteņa atkārtota izgudrošana jūsu lietojumprogrammā vienkārši atstās jūs ar salauztu riteni.

Zemāk man ir daži ieteikumi bibliotēkām, kas atbilst šiem kritērijiem:

Valoda Bibliotēka
Python Standarta bibliotēka
Javascript Brīdis un Mirkļa laika josla
Java 8 un jaunākas versijas Standarta bibliotēka (java.time)
Java 7 un vecākas versijas Joda-Laiks
Ātra SwiftDate

Ja jūsu valoda nav norādīta (jo neesmu ar to pietiekami pazīstama), vienkārši meklējiet datuma un laika bibliotēku. Iespējams, ka atradīsit labu bibliotēku, kas darīs visu nepieciešamo.

Zinot par laiku

Pēdējās zināšanas, kas man jāpiedalās, nav specifiskas darbam ar datumiem un laikiem, bet tās drīzāk ir vispārēja filozofija, kas palīdz mums izvairīties no problēmām, un tā attiecas uz datumu un laiku, tāpat kā uz visām citām programmēšanas problēmām .

Vienmēr pārbaudiet savus pieņēmumus.

Mēs tuvojamies katrai problēmai ar lielu zināšanu kopumu un vēl lielāku pieņēmumu kopumu. Apstrādājot datumus un laikus, ir svarīgāk nekā jebkad agrāk pārbaudīt savus pieņēmumus, lai pārliecinātos, ka tie joprojām atbilst jūsu scenārijam.

Šis saraksts , ar nosaukumu Falsehoods Programmers Believe About Time, sniedz daudz izcilu piemēru, kas ilustrē laiku, iespējams, nav tas, ko jūs domājāt. Izstrādājot vai izstrādājot funkciju, kas koncentrējas uz laiku, es iesaku paķert partneri un iziet šo sarakstu, nodrošinot, ka esat izvairījies no uzskaitītajām nepilnībām.

Laika kļūdas ir ļoti grūti noķert un vēl grūtāk pārbaudīt. Ja izstrādājat, paturot prātā šo sarakstu, jūs, iespējams, varēsiet izvairīties no smalkām kļūdām, kas varētu ietekmēt jūsu klientus, bet kuras viņi varētu neuztvert (vissliktākā kļūda!)

Laika zonas

Neviena diskusija par laikiem vai datumiem nebūtu pilnīga, nepieminot laika joslas. Papildus tam, ka esat iepazinies ar iepriekš uzskaitītajām izplatītajām nepatiesībām, iepazīstieties arī ar laika joslu pamatiem.

Laika joslas vienmēr būs sāpju punkts, strādājot ar laiku, pat ja domājat, ka jums tās visas ir “izdomātas”. Ja jums ir nedaudz zināšanu par laika joslām, tas palīdzēs jums koncentrēties domāšanai un palīdzēs jums nepieļaut loģikas kļūdas, manipulējot ar laiku.

Diemžēl nav iespējams pilnībā izvairīties no grūtībām, saglabājot un manipulējot ar laiku un datumiem, programmējot. Bet, ja jūs veicat šīs darbības un strādājat, paturot prātā šīs zināšanas, jūs varat atvieglot uzdevumu, samazinot uzrakstāmā koda apjomu un piespiežot sevi paradigmās, kuras, visticamāk, neizraisīs problēmas.

Dalieties Ar Draugiem: