Jag har varit professionell utvecklare i ungefär sex år nu. Under de sex åren har jag aldrig arbetat för ett företag eller för ett projekt som inte har problem med datum och tid i någon form.



Nästan alla applikationer du kommer att arbeta med kräver användning av tid på något sätt, vilket innebär att du någon gång kommer att behöva samla in, lagra, hämta och visa datum eller tider. Det finns ingen silverkula för att hantera datum eller tider och du kan aldrig komma undan den inneboende komplexiteten som följer med vårt tidsbegrepp, men det finns steg du kan ta för att göra det mindre smärtsamt.



Under de år som jag har arbetat med tiden på olika programmeringsspråk har jag funnit att följande kunskaper går långt.

Välja rätt dataformat

Det första steget när du arbetar med tider och datum är att välja en representation för dina data. Medan olika format kan verka mer eller mindre desamma, kommer det format du väljer att ha stor inverkan på hur du skriver och felsöker din kod.

Att använda en numerisk tidsstämpel när du behöver ett datum innebär att man analyserar datumets tidsstämpel och hämtar datumet från det, vilket kanske eller inte kan vara enkelt beroende på tidszon.


fortsätt se 2222

Att använda en anpassad sträng för att representera en tidsperiod verkar lätt att lagra och manipulera, men det är svårt att fråga. Dessutom kommer det att göra felsökning av din kod svårare att använda någon form av representation som inte omedelbart känns igen av det mänskliga ögat.

När jag väljer ett format för datum eller tider följer jag följande regler:



  1. Använd aldrig numeriska tidsstämplar. De är ofta de enklaste att få med standardbibliotek bland olika programmeringsspråk, men de är inte läsbara för människor och frestelsen att manipulera dem är för stark.
  2. Följa ISO 8601 , en standard som definierar ett format för datum- och tidsrelaterade data. Det är trivialt att hitta ett bibliotek för alla språk som kan hantera variationerna i ISO 8601.
  3. ISO 8601 är en standard, men den har många variationer. Du bör alltid välja den mest läsbara varianten av ISO 8601. Detta kräver ingen extra ansträngning men gör felsökning enklare.
  4. Din tidsstämpelsträng bör endast innehålla data du absolut behöver. När du arbetar med tider bör din sträng inte innehålla ett datum och när du arbetar med ett datum som är tidszon-agnostiskt bör din sträng inte innehålla en tidszon. Lägga till extra information lägger till tvetydighet i parsningsoperationen och avsikten med data för framtida utvecklare
  5. När du lagrar tidszoner ska du alltid normalisera till samma tidszon i dina tidsstämplar. Detta gör det inte bara lättare för en dator att sortera och bearbeta data utan det gör det också lättare för en mänsklig utvecklare.

Att följa dessa regler kommer inte att kosta dig mycket i förväg, men de kommer att göra ditt liv enklare när din ansökan är upprättad och du upptäcker att din användning av tider och datum inte är vad du förväntade dig.

Välja rätt verktyg

Som med de flesta problem i vår bransch handlar tid och datum om att välja rätt verktyg för jobbet.

Det är frestande att använda verktygen i ditt favoritspråk standardbibliotek, men det är kanske inte det bästa valet. Medan vissa standardbibliotek har fantastiska datum- och tidsfunktioner (Python), andra är rent av ynkliga (Javascript). Att använda fel verktyg gör det mycket svårare att utveckla funktioner baserat på tiden och det gör det lättare för buggar att glida in i din applikation.



Ett bra bibliotek för hantering av datum och tider gör att du kan följa de fem regler som nämns ovan. Specifikt bör den kunna:

  • Analysera alla datumrepresentationer du kan stöta på (inklusive externa representationer.)
  • Output till vilken datumrepresentation du kan behöva (inklusive externa representationer.)
  • Manipulera datum och tider genom att lägga till eller subtrahera tidsenheter från dem.
  • Jämför datum och tider.
  • Konvertera korrekt mellan tidszoner.

Det är viktigt att ditt bibliotek stöder dessa funktioner, annars blir frestelsen att försöka implementera funktionen själv för hög. Och bara för att vara tydlig, om du försöker implementera någon av den funktionen själv kommer du att misslyckas.

Analysera inte dina egna tidsstämplar med reguljära uttryck, lägg inte sekunder till en numerisk tidsstämpel eftersom det verkar som ett normalt nummer och jämför inte datum och tider med hjälp av jämställdhetsoperatören. Dessa bibliotek finns eftersom dessa problem är svåra att lösa och att uppfinna hjulet i din applikation kommer bara att lämna dig med ett trasigt hjul.

Nedan har jag några förslag på bibliotek som uppfyller dessa kriterier:

Språk Bibliotek
Pytonorm Standardbibliotek
Javascript Ögonblick och Moment Time Zone
Java 8 och senare Standardbibliotek (java.time)
Java 7 och senare Joda-Time
Snabb SwiftDate

Om ditt språk inte finns med på listan (eftersom jag inte känner till det) söker du bara efter datum- och tidsbibliotek. Chansen är stor att du hittar ett bra bibliotek som gör allt du behöver.

Att veta om tiden

Den sista kunskapen jag måste dela är inte specifik för att arbeta med datum och tider, utan är mer av en allmän filosofi som hjälper oss att undvika problem och det gäller såväl datum- som tidshantering som alla andra problem i programmering .

Kontrollera alltid dina antaganden.

Vi närmar oss alla problem som presenteras med en stor mängd kunskap och en ännu större antagande. När du hanterar datum och tider är det viktigare än någonsin att kontrollera dina antaganden för att säkerställa att de fortfarande håller för ditt scenario.

Denna lista , med titeln Falsehoods Programmers Believe About Time, ger många utmärkta exempel som illustrerar att tid förmodligen inte är vad du trodde. När du utformar eller utvecklar en funktion som är centrerad kring tiden uppmuntrar jag dig att ta en partner och gå igenom listan så att du har undvikit de listade fallgroparna.

Tidsfel är notoriskt svåra att fånga och ännu svårare att testa för. Om du utvecklar med den här listan i åtanke kanske du kan undvika subtila buggar som skulle påverka dina kunder men som de kanske inte fångar (den värsta typen av fel!)

Tidszoner

Ingen diskussion om tider eller datum skulle vara fullständig utan att nämna tidszoner. Förutom att bekanta dig med de vanliga falskheterna som anges ovan, bekanta dig också med grunderna i tidszoner.

Tidszoner kommer alltid att vara en smärtsam punkt när du arbetar med tiden, även om du tror att du har dem 'alla räknade ut'. Att ha lite kunskap om tidszoner hjälper dig att centrera ditt tänkande och säkerställa att du inte gör några logiska fel när du manipulerar tider.

Tyvärr finns det inget sätt att helt undvika svårigheterna att lagra och manipulera tider och datum vid programmering. Men om du följer dessa steg och arbetar med den här kunskapen i åtanke kan du göra uppgiften enklare genom att skära ner mängden kod du måste skriva och tvinga dig själv till paradigmer som är mindre benägna att orsaka problem.

Dela Med Dina Vänner: