저는 지금 약 6 년 동안 전문 개발자로 일했습니다. 그 6 년 동안 저는 어떤 형태로든 날짜 및 시간 문제로 어려움을 겪지 않는 회사 나 프로젝트에서 일한 적이 없습니다.



작업 할 거의 모든 응용 프로그램에는 어떤 방식 으로든 시간을 사용해야합니다. 즉, 어느 시점에서 날짜 나 시간을 수집, 저장, 검색 및 표시해야합니다. 날짜 나 시간을 처리하는 데 은색 총알이 없으며 시간 개념과 함께 제공되는 고유 한 복잡성에서 벗어날 수는 없지만 고통을 덜어주기 위해 취할 수있는 조치가 있습니다.



여러 프로그래밍 언어에서 시간을 들여 작업해온 수년 동안 다음 지식이 먼 길을 가고 있다는 것을 알게되었습니다.

올바른 데이터 형식 선택

시간과 날짜로 작업 할 때 첫 번째 단계는 데이터에 대한 표현을 선택하는 것입니다. 다른 형식은 다소 동일하게 보일 수 있지만 선택한 형식은 코드 작성 및 디버그 방법에 큰 영향을 미칩니다.

날짜가 필요할 때 숫자 타임 스탬프를 사용하는 것은 날짜 타임 스탬프를 구문 분석하고 그로부터 날짜를 검색하는 것을 의미하며, 이는 시간대에 따라 간단 할 수도 있고 그렇지 않을 수도 있습니다.


천사 10/10

사용자 지정 문자열을 사용하여 시간 범위를 나타내는 것은 저장 및 조작하기 쉽지만 쿼리하기는 어렵습니다. 또한 사람의 눈으로 즉시 인식 할 수없는 표현을 사용하면 코드 디버깅이 더 어려워집니다.

날짜 또는 시간 형식을 선택할 때 다음 규칙을 준수합니다.



  1. 숫자 타임 스탬프를 사용하지 마십시오. 다양한 프로그래밍 언어 중 표준 라이브러리에서 구하기 가장 쉬운 경우가 많지만 사람이 읽을 수없고 조작하려는 유혹이 너무 강합니다.
  2. 준수 ISO 8601 , 날짜 및 시간 관련 데이터의 형식을 정의하는 표준입니다. ISO 8601의 변형을 처리 할 수있는 모든 언어에 대한 라이브러리를 찾는 것은 간단합니다.
  3. ISO 8601은 표준이지만 다양한 변형이 있습니다. 항상 사람이 가장 읽을 수있는 ISO 8601 변형을 선택해야합니다. 이렇게하면 추가 노력이 필요하지 않지만 디버깅이 더 쉬워집니다.
  4. 타임 스탬프 문자열에는 반드시 필요한 데이터 만 포함되어야합니다. 시간으로 작업 할 때 문자열에 날짜가 포함되어서는 안되며 시간대에 구애받지 않는 날짜로 작업 할 때 문자열에 시간대가 포함되지 않아야합니다. 추가 정보를 추가하면 구문 분석 작업과 향후 개발자를위한 데이터 의도에 모호함이 추가됩니다.
  5. 시간대를 저장할 때 항상 타임 스탬프에서 동일한 시간대로 정규화합니다. 이렇게하면 컴퓨터가 데이터를 쉽게 정렬하고 처리 할 수있을뿐만 아니라 인간 개발자도 쉽게 사용할 수 있습니다.

이러한 규칙을 준수하면 비용이 많이 들지는 않지만 응용 프로그램이 설정되고 시간 및 날짜 사용이 예상 한 것과 다르다는 것을 알게되면 생활이 더 쉬워집니다.

올바른 도구 선택

업계의 대부분의 문제와 마찬가지로 시간 및 날짜 처리는 작업에 적합한 도구를 선택하는 것입니다.

좋아하는 언어의 표준 라이브러리에있는 도구를 사용하고 싶지만 최선의 선택이 아닐 수도 있습니다. 일부 표준 라이브러리에는 환상적인 날짜 및 시간 기능 (Python)이 있지만 다른 라이브러리는 완전히 불쌍합니다 (자바 스크립트). 잘못된 도구를 사용하면 시간을 기준으로 기능을 개발하기가 훨씬 더 어려워지고 버그가 애플리케이션에 쉽게 침투 할 수 있습니다.



날짜와 시간을 처리하기위한 좋은 라이브러리를 사용하면 위에서 언급 한 5 가지 규칙을 따를 수 있습니다. 특히 다음을 수행 할 수 있어야합니다.

  • 발생할 수있는 모든 날짜 표현 (외부 표현 포함)을 구문 분석합니다.
  • 필요한 모든 날짜 표현으로 출력 (외부 표현 포함)
  • 날짜와 시간에서 시간 단위를 더하거나 빼서 조작합니다.
  • 날짜와 시간을 비교하십시오.
  • 시간대간에 올바르게 변환합니다.

라이브러리에서 이러한 기능을 지원하는 것이 중요합니다. 그렇지 않으면 직접 기능을 구현하려는 유혹이 너무 높아집니다. 명확하게 말하면, 해당 기능을 직접 구현하려고하면 실패 할 것입니다.

정규 표현식으로 자신의 타임 스탬프를 파싱하지 말고 숫자 타임 스탬프에 초를 추가하지 마세요. 일반 숫자처럼 보이며 같음 연산자를 사용하여 날짜와 시간을 비교하지 않기 때문입니다. 이러한 라이브러리는 이러한 문제를 해결하기가 어려우며 응용 프로그램에서 바퀴를 재발 명하면 바퀴가 부러 질 수 있기 때문에 존재합니다.

다음은 이러한 기준에 맞는 라이브러리에 대한 몇 가지 제안 사항입니다.

언어 도서관
파이썬 표준 라이브러리
자바 스크립트 순간순간 시간대
Java 8 이상 표준 라이브러리 (java.time)
Java 7 이하 Joda-Time
빠른 SwiftDate

귀하의 언어가 목록에없는 경우 (내가 익숙하지 않아서) 날짜 및 시간 라이브러리를 검색하십시오. 필요한 모든 것을 할 수있는 좋은 라이브러리를 찾을 가능성이 있습니다.

시간에 대해 알기

내가 공유해야 할 마지막 지식은 날짜와 시간 작업에만 국한된 것이 아니라 문제를 피하는 데 도움이되는 일반적인 철학이며 프로그래밍의 다른 모든 문제와 마찬가지로 날짜 및 시간 처리에도 적용됩니다. .

항상 가정을 확인하십시오.

우리는 많은 양의 지식과 훨씬 더 많은 가정으로 제시된 모든 문제에 접근합니다. 날짜와 시간을 처리 할 때 가정이 시나리오에 여전히 적용되는지 확인하는 것이 그 어느 때보 다 중요합니다.

이 목록 Falsehoods Programmers Believe About Time이라는 제목의에서는 시간이 생각과 다를 수 있음을 보여주는 훌륭한 예를 많이 제공합니다. 시간을 중심으로하는 기능을 설계하거나 개발할 때 파트너를 잡고이 목록을 검토하여 나열된 함정을 피할 수 있도록하는 것이 좋습니다.

시간 버그는 잡기 어렵고 테스트하기도 더 어렵습니다. 이 목록을 염두에두고 개발하면 고객에게 영향을 주지만 포착하지 못할 수있는 미묘한 버그 (최악의 종류의 버그!)를 피할 수 있습니다.

시간대

시간대에 대한 언급 없이는 시간이나 날짜에 대한 논의가 완료되지 않습니다. 위에 나열된 일반적인 허위에 익숙해지는 것 외에도 표준 시간대의 기본 사항을 숙지하십시오.

시간대는 '모두 알아 냈다'고 생각하더라도 시간 작업을 할 때 지속적으로 골칫거리가 될 것입니다. 시간대에 대한 약간의 지식이 있으면 생각의 중심을 잡고 시간을 조작 할 때 논리 오류가 발생하지 않도록하는 데 도움이됩니다.

불행히도 프로그래밍 할 때 시간과 날짜를 저장하고 조작하는 어려움을 완전히 피할 수있는 방법은 없습니다. 그러나 이러한 단계를 따르고이 지식을 염두에두고 작업하면 작성해야하는 코드의 양을 줄이고 문제를 일으킬 가능성이 적은 패러다임으로 자신을 강제함으로써 작업을 더 쉽게 만들 수 있습니다.

친구들과 공유하십시오: