Ја сам професионални програмер већ око шест година. Током тих шест година никада нисам радио за компанију или на пројекту који се у неком облику није борио са датумима и временом.



Готово свака апликација на којој ћете радити захтева на неки начин употребу времена, што значи да ћете у неком тренутку морати да сакупљате, складиштите, преузимате и приказујете датуме или времена. Не постоји сребрни метак за бављење датумима или временима и никада не можете избећи урођену сложеност која долази с нашим концептом времена, али постоје кораци које можете предузети да бисте то учинили мање болним.



Током година колико радим са временом на различитим програмским језицима, открио сам да следеће знање иде далеко.

Избор правог формата података

Први корак у раду са временима и датумима је одабир приказа података. Иако се различити формати могу чинити више или мање једнаки, формат који сте одабрали имат ће велики утицај на то како пишете и отклањате грешке у свом коду.

Коришћење нумеричке временске ознаке када вам је потребан датум подразумеваће рашчлањивање временске ознаке датума и преузимање датума из ње, што може или не мора бити једноставно у зависности од временске зоне.


бројеви анђела 949

Коришћење прилагођеног низа за представљање распона времена чини се лаким за складиштење и манипулацију, али је тешко поставити упит. Поред тога, коришћење било које врсте репрезентације коју људско око не препозна одмах, отежаће отклањање грешака у вашем коду.

Када бирам формат датума или времена, придржавам се следећих правила:



  1. Никада не користите нумеричке временске ознаке. Често их је најлакше добити у стандардним библиотекама међу различитим програмским језицима, али нису читљиви људима и искушење да се њима манипулише је прејако.
  2. Придржава ИСО 8601 , стандард који дефинише формат података који се односе на датум и време. Тривијално је пронаћи библиотеку за било који језик који може да се носи са варијацијама ИСО 8601.
  3. ИСО 8601 је стандард, али има много варијација. Увек бисте требало да изаберете човеку најчитљивију варијанту ИСО 8601. То не захтева додатни напор, али олакшава отклањање грешака.
  4. Низ временске ознаке треба да садржи само податке који су вам апсолутно потребни. Када радите са временом, ваш низ не би требало да садржи датум, а када радите са датумом који је агностичан за временску зону, ваш низ не би требало да садржи временску зону. Додавање додатних информација додаје двосмисленост операцији рашчлањивања и намени података за будуће програмере
  5. Када складиштите временске зоне, увек се нормализујте на исту временску зону у временским ознакама. Ово не само да рачунару олакшава сортирање и обраду података, већ и људском програмеру.

Придржавање ових правила неће вас коштати много унапред, али ће вам олакшати живот када се пријава успостави и када утврдите да коришћење времена и датума није оно што сте очекивали.

Избор правог алата

Као и код већине проблема у нашој индустрији, руковање временом и датумима своди се на одабир правог алата за посао.

Примамљиво је користити алате у стандардној библиотеци вашег омиљеног језика, али то можда није најбољи избор. Док неке стандардне библиотеке имају фантастичне функције датума и времена (Питхон), друге су заиста јадне (Јавасцрипт). Коришћење погрешног алата чини много тежим развој функција заснованих на времену и олакшава грешке да уђу у вашу апликацију.



Добра библиотека за руковање датумима и временима омогућиће вам да следите 5 горе наведених правила. Конкретно, требало би да буде у стању да:

  • Анализирајте било коју представу датума на коју можете наићи (укључујући спољне представе.)
  • Излаз на било који датумски приказ који ће вам можда требати (укључујући спољне репрезентације.)
  • Манипулишите датумима и временима додавањем или одузимањем јединица времена од њих.
  • Упоредите датуме и време.
  • Тачно претварање између временских зона.

Важно је да ваша библиотека подржава ове функције, иначе ће искушење да сами покушате да примените функционалност бити превисоко. И само да буде јасно, ако покушате да примените било коју од тих функција сами, нећете успети.

Не рашчлањујте сопствене временске ознаке регуларним изразима, немојте додавати секунде нумеричкој временској ознаци јер се чини као нормалан број и не упоређујте датуме и времена помоћу оператора једнакости. Ове библиотеке постоје јер је ове проблеме тешко решити, а поновно проналазак точка у вашој апликацији оставиће вам сломљени точак.

Испод имам неколико предлога за библиотеке које одговарају овим критеријумима:

Језик Библиотека
Питхон Стандардна библиотека
Јавасцрипт Тренутак и Временска зона тренутка
Јава 8 и новије верзије Стандардна библиотека (јава.тиме)
Јава 7 и новије верзије Јода-Тиме
Брзо СвифтДате

Ако ваш језик није наведен (јер га нисам довољно упознат), потражите библиотеку датума и времена. Шансе су да ћете пронаћи добру библиотеку која ће урадити све што вам треба.

Знајући о времену

Последњи део знања који морам да поделим није специфичан за рад са датумима и временима, већ је више општа филозофија која нам помаже да избегнемо проблеме и односи се на руковање датумом и временом колико и на све друге проблеме у програмирању .

Увек проверите своје претпоставке.

Сваком представљеном проблему приступамо са великим бројем знања и још већим бројем претпоставки. Приликом руковања датумима и временима важније је него икад да проверите своје претпоставке да бисте се уверили да и даље важе за ваш сценарио.

Ова листа , под називом Лажни програмери верују у време, даје мноштво одличних примера који илуструју да време вероватно није оно што сте мислили. Када дизајнирате или развијате функцију која се усредсређује на време, подстичем вас да зграбите партнера и прођете кроз ову листу осигуравајући да сте избегли наведене замке.

Временске грешке је ноторно тешко ухватити, а још теже их је тестирати. Ако се будете развијали имајући на уму ову листу, можда ћете моћи да избегнете суптилне грешке које би утицале на ваше купце, али које можда неће ухватити (најгора врста грешке!)

Временске зоне

Ниједна дискусија о времену или датумима не би била потпуна без помињања временских зона. Поред упознавања са горе наведеним уобичајеним неистинама, упознајте се и са основама временских зона.

Временске зоне ће непрестано представљати бол у раду с временом, чак и ако мислите да их имате „све скужено“. Поседовање мало знања о временским зонама помоћи ће вам да усредсредите своје размишљање и осигураћете да не правите логичке грешке приликом манипулисања временом.

Нажалост, не постоји начин да се у потпуности избегну потешкоће складиштења и манипулације временом и датумима током програмирања. Али ако следите ове кораке и радите с тим знањем на уму, можете си олакшати задатак смањењем количине кода који морате написати и присиљавањем на парадигме за које је мање вероватно да ће изазвати проблеме.

Подели Са Пријатељима: