Dowiedz Się O Swojej Liczbie Aniołów
Praca z datami i godzinami w aplikacji
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:
- 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.
- 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.
- 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.
- 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
- 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: