Вече около шест години съм професионален разработчик. През тези шест години никога не съм работил за компания или проект, който не се е борил с проблеми с датата и часа под някаква форма.





Почти всяко приложение, по което ще работите, изисква използването на време по някакъв начин, което означава, че в даден момент ще трябва да събирате, съхранявате, извличате и показвате дати или часове. Няма сребърен куршум за справяне с дати или часове и никога не можете да избягате от присъщата сложност, която идва с нашата концепция за време, но има стъпки, които можете да предприемете, за да го намалите.



През годините, в които работя с времето на различни езици за програмиране, открих, че следните знания имат дълъг път.



Избор на правилния формат на данните

Първата стъпка при работа с часове и дати е да изберете представяне за вашите данни. Въпреки че различните формати може да изглеждат повече или по-малко еднакви, избраният от вас формат ще окаже голямо влияние върху начина, по който пишете и отстранявате грешки в кода си.

Използването на числов клеймо, когато имате нужда от дата, ще означава анализиране на клеймото за дата и извличане на датата от това, което може да е или не може да бъде лесно в зависимост от часовата зона.


номер 444

Използването на персонализиран низ за представяне на период от време изглежда лесно за съхранение и манипулиране, но е трудно да се направи заявка. Освен това използването на всякакъв вид представяне, което не се разпознава веднага от човешкото око, ще затрудни отстраняването на грешки в кода ви.



Когато избирам формат за дати или часове, спазвам следните правила:



  1. Никога не използвайте числови клейма. Често са най-лесни за получаване от стандартните библиотеки сред различни езици за програмиране, но не са четими от хората и изкушението да се манипулира с тях е твърде силно.
  2. Придържа ISO 8601 , стандарт, който определя формат за данни, свързани с датата и времето. Тривиално е да се намери библиотека за всеки език, който може да се справи с вариациите на ISO 8601.
  3. ISO 8601 е стандарт, но има много вариации. Винаги трябва да избирате най-разбираемия от човека вариант на ISO 8601. Това не изисква допълнителни усилия, но улеснява отстраняването на грешки.
  4. Вашият низ с времеви клей трябва да съдържа само данни, от които абсолютно се нуждаете. Когато работите с пъти, вашият низ не трябва да съдържа дата, а когато работите с дата, която е агностична за часовата зона, вашият низ не трябва да съдържа часова зона. Добавянето на допълнителна информация добавя неяснота към операцията за синтактичен анализ и към намерението на данните за бъдещи разработчици
  5. Когато съхранявате часовите зони, винаги се нормализирайте до една и съща часова зона във вашите времеви марки. Това не само улеснява компютъра да сортира и обработва данните, но улеснява и разработчика.

Спазването на тези правила няма да ви струва много напред, но те ще улеснят живота ви, когато кандидатствате и установите, че използването на часове и дати не е това, което сте очаквали.

Изборът на правилния инструмент

Както при повечето проблеми в нашата индустрия, обработката на времето и датата се свежда до избора на подходящия инструмент за работата.



Изкушаващо е да използвате инструментите в стандартната библиотека на любимия ви език, но това може да не е най-добрият избор. Докато някои стандартни библиотеки имат фантастични функции за дата и час (Python), други са направо жалки (Javascript). Използването на грешен инструмент прави много по-трудно разработването на функции, базирани на времето, и улеснява грешките да се вмъкнат във вашето приложение.



Добрата библиотека за обработка на дати и часове ще ви позволи да следвате 5-те правила, споменати по-горе. По-конкретно, той трябва да може да:



  • Анализирайте всяко представяне на дата, което може да срещнете (включително външни представителства.)
  • Изход за всяко представяне на дата, което може да ви е необходимо (включително външни представителства.)
  • Манипулирайте дати и часове, като добавяте или изваждате мерни единици от тях.
  • Сравнете дати и часове.
  • Правилно конвертиране между часовите зони.

Важно е вашата библиотека да поддържа тези функции, в противен случай изкушението да се опитате сами да приложите функционалността ще бъде твърде голямо. И за да бъде ясно, ако се опитате сами да внедрите някоя от тази функционалност, ще се провалите.

Не анализирайте собствените си времеви клейма с регулярни изрази, не добавяйте секунди към числов клеймо, защото изглежда като нормално число и не сравнявайте дати и часове, използвайки оператора за равенство. Тези библиотеки съществуват, защото тези проблеми са трудни за решаване и преоткриването на колелото във вашето приложение просто ще ви остави със счупено колело.

По-долу имам няколко предложения за библиотеки, които отговарят на тези критерии:

Език Библиотека
Python Стандартна библиотека
Javascript Момент и Часова зона на момента
Java 8 и по-нови версии Стандартна библиотека (java.time)
Java 7 и по-долу Joda-Time
Бързо SwiftDate

Ако езикът ви не е в списъка (тъй като не съм достатъчно запознат с него), просто потърсете библиотека с дати и час. Шансовете са, че ще намерите добра библиотека, която ще направи всичко необходимо.

Знаейки за времето

Последната част от знанията, които трябва да споделя, не е специфична за работата с дати и часове, но е по-скоро обща философия, която ни помага да избегнем проблеми и се отнася за обработката на датата и часа, както и всеки друг проблем в програмирането .

Винаги проверявайте вашите предположения.

Ние подхождаме към всеки представен проблем с голям набор от знания и още по-голям набор от предположения. Когато обработвате дати и часове, е по-важно от всякога да проверите вашите предположения, за да сте сигурни, че те все още са валидни за вашия сценарий.

Този списък , озаглавен Falsehoods Programmer Believe About Time, дава много отлични примери, които илюстрират, че времето вероятно не е това, което сте мислили. Когато проектирате или разработвате функция, която се центрира във времето, ви препоръчвам да вземете партньор и да прегледате този списък, като се уверите, че сте избегнали изброените клопки.

Известно е, че грешките във времето са трудни за улавяне и още по-трудни за тестване. Ако се развиете с този списък предвид, може да успеете да избегнете фини грешки, които биха засегнали клиентите ви, но които те може да не уловят (най-лошият вид грешка!)

Времеви зони

Никоя дискусия за часове или дати не би била пълна, без да се споменават часовите зони. Освен че се запознаете с често срещаните лъжи, изброени по-горе, запознайте се и с основите на часовите зони.

Часовите зони непрекъснато ще бъдат болезнена точка при работа с времето, дори ако смятате, че ги разполагате „всички разбрани“. Наличието на малко знания за часовите зони ще ви помогне да центрирате мисленето си и ще гарантирате, че няма да допускате никакви логически грешки при манипулиране на времената.

За съжаление няма начин да се избегне изцяло трудността да се съхраняват и манипулират часовете и датите при програмиране. Но ако следвате тези стъпки и работите с тези познания, можете да улесните задачата, като намалите количеството код, който трябва да напишете, и се принудите към парадигми, които са по-малко склонни да причиняват проблеми.

Споделете С Приятелите Си: