Jeg har vært profesjonell utvikler i omtrent seks år nå. I løpet av de seks årene har jeg aldri jobbet for et selskap eller et prosjekt som ikke sliter med problemer med dato og tid i noen form.



Nesten alle applikasjoner du vil jobbe med krever bruk av tid på en eller annen måte, noe som betyr at du på et tidspunkt må samle, lagre, hente og vise datoer eller klokkeslett. Det er ingen sølvkule for å håndtere datoer eller tidspunkter, og du kan aldri unnslippe den iboende kompleksiteten som følger med vårt tidsbegrep, men det er trinn du kan ta for å gjøre det mindre vondt.



I årene jeg har jobbet med tid på tvers av forskjellige programmeringsspråk, har jeg funnet at følgende kunnskaper strekker seg langt.

Velge riktig dataformat

Det første trinnet når du jobber med tider og datoer er å velge en representasjon for dataene dine. Mens forskjellige formater kan virke mer eller mindre like, vil formatet du velger ha stor innvirkning på hvordan du skriver og feilsøker koden din.

Å bruke et numerisk tidsstempel når du trenger en dato, vil bety at du analyserer datoens tidsstempel og henter datoen fra det, noe som kanskje ikke er greit, avhengig av tidssone.


betydningen av 1223

Å bruke en egendefinert streng for å representere et tidsrom virker enkelt å lagre og manipulere, men det er vanskelig å spørre. I tillegg vil det å gjøre feilsøking av koden din vanskeligere å bruke enhver form for representasjon som ikke umiddelbart kan gjenkjennes av det menneskelige øye.

Når jeg velger format for datoer eller klokkeslett, overholder jeg følgende regler:



  1. Bruk aldri numeriske tidsstempler. De er ofte de enkleste å få tak i av standardbiblioteker blant forskjellige programmeringsspråk, men de er ikke lesbare for mennesker, og fristelsen til å manipulere dem er for sterk.
  2. Følg deg ISO 8601 , en standard som definerer et format for dato- og tidsrelaterte data. Det er trivielt å finne et bibliotek for ethvert språk som kan håndtere variantene av ISO 8601.
  3. ISO 8601 er en standard, men den har mange variasjoner. Du bør alltid velge den mest lesbare varianten av ISO 8601. Dette krever ingen ekstra innsats, men gjør feilsøking lettere.
  4. Tidsstempelstrengen din skal bare inneholde data du absolutt trenger. Når du arbeider med ganger, bør strengen ikke inneholde en dato, og når du arbeider med en dato som er tidssone-agnostisk, bør strengen ikke inneholde en tidssone. Å legge til ekstra informasjon legger til tvetydighet i parseringsoperasjonen og til intensjonen med dataene for fremtidige utviklere
  5. Når du lagrer tidssoner, normaliser deg alltid til samme tidssone i tidsstempel. Dette gjør det ikke bare lettere for en datamaskin å sortere og behandle dataene, men det gjør det også lettere for en menneskelig utvikler.

Å overholde disse reglene vil ikke koste deg mye på forhånd, men de vil gjøre livet ditt lettere når søknaden din er etablert, og du finner ut at bruken av tid og datoer ikke er det du forventet.

Velge riktig verktøy

Som med de fleste problemer i vår bransje, handler tid og dato om å velge riktig verktøy for jobben.

Det er fristende å bruke verktøyene i favorittspråkets standardbibliotek, men det er kanskje ikke det beste valget. Mens noen standardbiblioteker har fantastiske dato- og tidsfunksjoner (Python), er andre rett og slett ynkelig (Javascript). Å bruke feil verktøy gjør det mye vanskeligere å utvikle funksjoner basert på tid, og det gjør det lettere for feil å gli inn i applikasjonen din.



Et godt bibliotek for håndtering av datoer og klokkeslett gjør at du kan følge de fem reglene som er nevnt ovenfor. Spesielt skal den kunne:

  • Analyser en hvilken som helst datorepresentasjon du måtte støte på (inkludert eksterne representasjoner.)
  • Output til hvilken som helst datorepresentasjon du trenger (inkludert eksterne representasjoner.)
  • Manipuler datoer og klokkeslett ved å legge til eller trekke tidsenheter fra dem.
  • Sammenlign datoer og klokkeslett.
  • Konverter riktig mellom tidssoner.

Det er viktig at biblioteket ditt støtter disse funksjonene, ellers blir fristelsen til å prøve å implementere funksjonaliteten selv for stor. Og bare for å være tydelig, hvis du prøver å implementere noe av den funksjonaliteten selv, vil du mislykkes.

Ikke analyser dine egne tidsstempler med vanlige uttrykk, ikke legg sekunder til et numerisk tidsstempel fordi det virker som et normalt tall, og ikke sammenlign datoer og klokkeslett ved å bruke likhetsoperatoren. Disse bibliotekene eksisterer fordi disse problemene er vanskelige å løse, og å finne opp hjulet i applikasjonen din vil bare gi deg et ødelagt hjul.

Nedenfor har jeg noen forslag til biblioteker som oppfyller disse kriteriene:

Språk Bibliotek
Python Standard bibliotek
Javascript Øyeblikk og Moment Time Zone
Java 8 og nyere Standard bibliotek (java.time)
Java 7 og nyere Joda-Time
Fort SwiftDate

Hvis språket ditt ikke er oppført (fordi jeg ikke er kjent nok med det), kan du bare søke etter dato og klokkeslett. Sjansen er stor for at du finner et godt bibliotek som gjør alt du trenger.

Å vite om tid

Den siste biten av kunnskap jeg må dele er ikke spesifikk for å jobbe med datoer og klokkeslett, men er mer en generell filosofi som hjelper oss med å unngå problemer, og den gjelder så mye som dato og tid som det gjør alle andre problemer i programmering .

Sjekk alltid antagelsene dine.

Vi nærmer oss hvert problem som presenteres med en stor mengde kunnskap og en enda større mengde antagelser. Når du håndterer datoer og klokkeslett, er det viktigere enn noen gang å sjekke antagelsene dine for å sikre at de fremdeles holder for ditt scenario.

Denne listen , med tittelen Falsehoods Programmers Believe About Time, gir mange gode eksempler som illustrerer at tiden sannsynligvis ikke er det du trodde. Når du designer eller utvikler en funksjon som er sentrert rundt tid, oppfordrer jeg deg til å hente en partner og gå gjennom denne listen for å sikre at du har unngått fallgruvene.

Tidsfeil er kjent vanskelig å fange og enda vanskeligere å teste for. Hvis du utvikler deg med denne listen i tankene, kan du kanskje unngå subtile feil som vil påvirke kundene dine, men som de kanskje ikke får tak i (den verste typen feil!)

Tidssoner

Ingen diskusjoner om tider eller datoer vil være fullstendig uten omtale av tidssoner. I tillegg til å gjøre deg kjent med de vanlige løgnene som er oppført ovenfor, bør du også gjøre deg kjent med det grunnleggende i tidssoner.

Tidssoner vil konsekvent være et smertepunkt når du jobber med tiden, selv om du tror du har dem “alle funnet ut”. Å ha litt kunnskap om tidssoner vil hjelpe deg med å sentrere tankene dine og bidra til at du ikke gjør noen logiske feil når du manipulerer tider.

Dessverre er det ingen måte å helt unngå vanskeligheter med å lagre og manipulere tider og datoer når du programmerer. Men hvis du følger disse trinnene og jobber med denne kunnskapen i tankene, kan du gjøre oppgaven lettere ved å kutte ned mengden kode du må skrive og tvinge deg selv til paradigmer som er mindre sannsynlig å forårsake problemer.

Del Med Vennene Dine: