문제

SQLITE 데이터베이스에 달력 날짜 (하루, 시간이 없음)가있는 품목을 저장해야합니다. 열에서 날짜를 나타내는 가장 좋은 방법은 무엇입니까? Julian Days와 Unix 초가 합리적인 대안으로 떠 오릅니다. 내가 어떤 시계 시간에 며칠 이외의 유닛과 함께 가면?

업데이트 : ISO8601을 알고 있으며 실제로 날짜를 프로토 타입의 YYYY-MM-DD 형식으로 문자열로 저장하는 데 사용했습니다. 그러나 다양한 산술의 경우 내부적으로 숫자로 변환해야하므로 숫자를 저장하고 디스플레이를 위해 문자열로 변환하는 것이 좋습니다. 이 숫자는 어떤 단위에 들어야하며, 어떤 기원이 있었으며, 단위가 하루보다 더 정확한 경우 어느 시간을 사용해야합니까?

도움이 되었습니까?

해결책

날짜를 외부 도구 또는 라이브러리에 전달할 것으로 예상되는 경우 기대하는 형식을 사용해야합니다. 유닉스 시간은 디지털 호의의 링구아 프랑카 인 것처럼 보이므로 외부 상황이 당신을 위해 선택하지 않으면 좋은 기본값입니다.

ISO 8601 관심이있을 수 있습니다.

편집하다:

그러나 다양한 산술의 경우 내부적으로 숫자로 변환해야하므로 숫자를 저장하고 디스플레이를 위해 문자열로 변환하는 것이 좋습니다.

아, 그건 말이됩니다. 환경 (.NET? Python? C ++?)에 시간 처리 도구가있는 경우 기본 장치와 에포크를 사용하는 것이 가장 좋습니다. 모든 날짜 조작 기능을 다시 작성할 이유가 없습니다. 그들은 보는 것보다 까다 롭습니다. 그렇지 않으면, 나는 당신의 응용 프로그램에 대한 합리적인 시대 이후로 현지 (그레고 리아?) 달력에서 며칠을 사용할 것입니다. 관대하게, 당신은 예상보다 일찍 날짜를 갑자기 처리해야 할 때 리버스 Y2K 버그를 원하지 않습니다.

시간은 전적으로 맛의 문제입니다. 자정은 가장 깨끗한 선택 (시간, 분, 두 번째 필드의 모든 0)처럼 보이지만 사용자에게 도달하지 않기 때문에 실제적 영향은 없습니다. 사실 부활절 달걀에게는 좋은 장소가 될 것입니다.

다른 팁

기지를 덮으려면 날짜를 UTC에 저장하고 ISO 표준을 선택하십시오. 이 접근법은 최소한의 노력이 필요하며 향후 인터롭 두통으로부터 코드를 보호합니다. 나는 @skymt에 동의합니다 ISO 8601 좋은 선택입니다.

C ++를 사용하는 경우 부스트 :: date_time을 볼 가치가 있습니다.

"Best"는 날짜가 어디에서 나오는 지 (NSDate 객체, 일부 XML 피드)와 조작 방법에 따라 거의 전적으로 달라집니다 (단순히 "Days The Days"와 같은 산술을 수행하는 것과 같은 단순히 저장).

반드시 이것을 추천하는 것은 아니지만 날짜를 SQLITE DB에 저장하는 데 필요한 앱을 썼습니다. 처음에 나는 월과 날의 두 열을 사용했는데, 그 월은 2000 년 1 월 이후 달의 수로 정의 된 월과 날을 사용했습니다. 날짜 당 1 행을 시행해야했기 때문에 두 열의 고유 인덱스를 정의하여 돌았습니다. 업데이트를 끔찍하게 느리게 만들기 위해.

두 번째 시도를 위해, 나는 비슷한 체계를 사용했지만 하루의 바닥 5 비트와 달의 나머지 상위 비트 (2000 년 1 월 이후)를 사용하여 날짜를 1 숫자로 인코딩했습니다. 변환 기능은 다음과 같습니다.

Date = (Month << 5) | Day
Month = Date >> 5
Day = 0x1F & Date

이 체계는 날짜에 수치 순서를 보존하고 구성 요소로 쉽게 분할 할 수 있습니다. 매월 덩어리에 데이터를 저장하고 있었기 때문에 내 앱에 적합합니다. 날짜가 주어지면 다음 날짜를 찾으려면 날짜 + 1이 유효한 날짜가 아닐 수 있으므로이 체계가 최고가 아닐 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top