Jestem profesjonalnym programistą od około sześciu lat. Przez te sześć lat nigdy nie pracowałem dla firmy ani nad projektem, który nie borykałby się z problemami z datą i godziną w jakiejś formie.



Prawie każda aplikacja, nad którą będziesz pracować, wymaga pewnego wykorzystania czasu, co oznacza, że ​​w pewnym momencie będziesz musiał gromadzić, przechowywać, pobierać i wyświetlać daty lub godziny. Nie ma srebrnej kuli do radzenia sobie z datami lub godzinami i nigdy nie możesz uciec od nieodłącznej złożoności, która wiąże się z naszą koncepcją czasu, ale są kroki, które możesz podjąć, aby zmniejszyć ból.



Przez lata, kiedy pracowałem z czasem nad różnymi językami programowania, odkryłem, że następująca wiedza może mi pomóc.

Wybór odpowiedniego formatu danych

Pierwszym krokiem podczas pracy z godzinami i datami jest wybór reprezentacji danych. Chociaż różne formaty mogą wydawać się mniej więcej takie same, wybrany format będzie miał duży wpływ na sposób pisania i debugowania kodu.

Użycie liczbowego znacznika czasu, gdy potrzebujesz daty, będzie oznaczać przeanalizowanie znacznika czasowego daty i pobranie z niej daty, co może być proste lub nie, w zależności od strefy czasowej.


anioł numer 707 znaczenie

Używanie niestandardowego ciągu do reprezentowania przedziału czasu wydaje się łatwe do przechowywania i manipulowania, ale trudne jest zapytanie. Ponadto użycie jakiejkolwiek reprezentacji, która nie jest natychmiast rozpoznawalna dla ludzkiego oka, utrudni debugowanie kodu.

Wybierając format dat lub godzin, kieruję się następującymi zasadami:



  1. Nigdy nie używaj numerycznych sygnatur czasowych. Często są najłatwiejsze do zdobycia w standardowych bibliotekach różnych języków programowania, ale nie są czytelne dla człowieka, a pokusa manipulowania nimi jest zbyt silna.
  2. Przestrzegać ISO 8601 , standard definiujący format danych związanych z datą i godziną. Znalezienie biblioteki dla dowolnego języka, która obsługuje różne odmiany ISO 8601, jest trywialne.
  3. ISO 8601 jest standardem, ale ma wiele odmian. Powinieneś zawsze wybierać najbardziej czytelną dla człowieka wersję ISO 8601. Nie wymaga to dodatkowego wysiłku, ale ułatwia debugowanie.
  4. Twój znacznik czasu powinien zawierać tylko te dane, których absolutnie potrzebujesz. Podczas pracy z godzinami, ciąg nie powinien zawierać daty, a podczas pracy z datą niezależną od strefy czasowej, ciąg nie powinien zawierać strefy czasowej. Dodanie dodatkowych informacji dodaje niejednoznaczności do operacji analizowania i do celu danych dla przyszłych programistów
  5. Podczas przechowywania stref czasowych zawsze normalizuj tę samą strefę czasową w swoich sygnaturach czasowych. To nie tylko ułatwia komputerowi sortowanie i przetwarzanie danych, ale także ułatwia pracę programistom.

Przestrzeganie tych zasad nie będzie Cię kosztować z góry, ale ułatwi Ci życie, gdy aplikacja zostanie utworzona i okaże się, że wykorzystanie czasu i dat nie jest zgodne z oczekiwaniami.

Wybór odpowiedniego narzędzia

Podobnie jak w przypadku większości problemów w naszej branży, obsługa czasu i daty sprowadza się do wyboru odpowiedniego narzędzia do pracy.

Używanie narzędzi z biblioteki standardowej Twojego ulubionego języka jest kuszące, ale może to nie być najlepszy wybór. Podczas gdy niektóre biblioteki standardowe mają fantastyczne funkcje daty i czasu (Python), inne są wręcz żałosne (JavaScript). Użycie niewłaściwego narzędzia znacznie utrudnia opracowywanie funkcji w oparciu o czas, co ułatwia błędom przedostanie się do aplikacji.



Dobra biblioteka do obsługi dat i godzin pozwoli ci przestrzegać 5 zasad wymienionych powyżej. W szczególności powinien być w stanie:

  • Przeanalizuj wszelkie reprezentacje dat, z którymi możesz się spotkać (w tym reprezentacje zewnętrzne).
  • Dane wyjściowe do dowolnej reprezentacji daty, której możesz potrzebować (w tym reprezentacji zewnętrznych).
  • Manipuluj datami i godzinami, dodając lub odejmując od nich jednostki czasu.
  • Porównaj daty i godziny.
  • Prawidłowo konwertuj między strefami czasowymi.

Ważne jest, aby Twoja biblioteka obsługiwała te funkcje, w przeciwnym razie pokusa samodzielnego wdrożenia tej funkcji będzie zbyt duża. I żeby było jasne, jeśli spróbujesz samodzielnie wdrożyć którąkolwiek z tych funkcji, poniesiesz porażkę.

Nie analizuj własnych sygnatur czasowych za pomocą wyrażeń regularnych, nie dodawaj sekund do liczbowego znacznika czasu, ponieważ wydaje się, że jest to normalna liczba, i nie porównuj dat i godzin za pomocą operatora równości. Te biblioteki istnieją, ponieważ problemy te są trudne do rozwiązania, a wymyślanie na nowo koła w aplikacji po prostu pozostawi zepsute koło.

Poniżej kilka sugestii dotyczących bibliotek spełniających te kryteria:

Język Biblioteka
Pyton Biblioteka standardowa
Javascript Za chwilę i Moment Time Zone
Java 8 i nowsze Biblioteka standardowa (java.time)
Java 7 i starsze Joda-Time
Szybki SwiftDate

Jeśli Twojego języka nie ma na liście (ponieważ nie znam go wystarczająco), wyszukaj bibliotekę dat i godzin. Możliwe, że znajdziesz dobrą bibliotekę, która zrobi wszystko, czego potrzebujesz.

Znajomość czasu

Ostatnia część wiedzy, którą muszę się podzielić, nie jest specyficzna dla pracy z datami i godzinami, ale jest bardziej ogólną filozofią, która pomaga nam uniknąć problemów i dotyczy obsługi daty i czasu tak samo, jak każdego innego problemu w programowaniu .

Zawsze sprawdzaj swoje przypuszczenia.

Do każdego przedstawionego problemu podchodzimy z dużą wiedzą i jeszcze szerszym korpusem założeń. Podczas obsługi dat i godzin ważniejsze niż kiedykolwiek jest sprawdzenie swoich założeń, aby upewnić się, że są one zgodne z Twoim scenariuszem.

Ta lista , zatytułowany Falsehoods Programmers Believe About Time, podaje wiele doskonałych przykładów ilustrujących, że czas prawdopodobnie nie jest tym, o czym myśleliście. Kiedy projektujesz lub rozwijasz funkcję, która koncentruje się na czasie, zachęcam do znalezienia partnera i przejrzenia tej listy, aby uniknąć wymienionych pułapek.

Błędy czasu są niezwykle trudne do wykrycia, a jeszcze trudniejsze do przetestowania. Jeśli będziesz tworzyć z myślą o tej liście, możesz uniknąć subtelnych błędów, które mogłyby wpłynąć na Twoich klientów, ale których mogą nie wykryć (najgorszy rodzaj błędu!)

Strefy czasowe

Żadna dyskusja na temat czasu i dat nie byłaby pełna bez wzmianki o strefach czasowych. Oprócz zapoznania się z typowymi fałszerstwami wymienionymi powyżej, zapoznaj się również z podstawami stref czasowych.

Strefy czasowe będą konsekwentnie bolesne podczas pracy z czasem, nawet jeśli myślisz, że masz je „rozgryzione”. Odrobina wiedzy na temat stref czasowych pomoże Ci skoncentrować myślenie i upewnić się, że nie popełniasz żadnych błędów logicznych podczas manipulowania czasami.

Niestety nie ma sposobu, aby całkowicie uniknąć trudności związanych z przechowywaniem i manipulowaniem czasem i datą podczas programowania. Ale jeśli wykonasz te kroki i będziesz pracować z tą wiedzą, możesz ułatwić zadanie, zmniejszając ilość kodu, który musisz napisać, i zmuszając się do paradygmatów, które z mniejszym prawdopodobieństwem powodują problemy.

Podziel Się Z Przyjaciółmi: