MJD으로 표시되는 시간과 5 바이트로 BCD 형식으로 표시되는 시간이 있습니다.이 날짜 - 시간을 sqlite 데이터베이스에 저장하는 데 권장되는 형식이 궁금합니다. 그것에 대해 검색 할 수 있습니까?데이터베이스에 MJD + BCD 형식으로 시간을 절약하기 위해 권장되는 형식
내 첫 번째 시도는 그대로 5 바이트 문자열로 저장하는 것입니다. 사용자는 동일한 형식을 사용하여 검색하고 결과는 다음 코드로 사용자가 유닉스 시간으로 변환합니다.
그러나 나중에 시간을 정수 (예 : UTC 시간)로 저장하도록 제안되었습니다. 그러나 표준 변환 방법을 찾을 수는 없습니다.
나는 이것이 일반적인 문제라고 생각하며 의견을 듣고 싶습니다.
time_t sidate_to_unixtime(unsigned char sidate[])
{
int k = 0;
struct tm tm;
double mjd;
/* check for the undefined value */
if ((sidate[0] == 0xff) &&
(sidate[1] == 0xff) &&
(sidate[2] == 0xff) &&
(sidate[3] == 0xff) &&
(sidate[4] == 0xff)) {
return -1;
}
memset(&tm, 0, sizeof(tm));
mjd = (sidate[0] << 8) | sidate[1];
tm.tm_year = (int) ((mjd - 15078.2)/365.25);
tm.tm_mon = (int) (((mjd - 14956.1) - (int) (tm.tm_year * 365.25))/30.6001);
tm.tm_mday = (int) mjd - 14956 - (int) (tm.tm_year * 365.25) - (int) (tm.tm_mon * 30.6001);
if ((tm.tm_mon == 14) || (tm.tm_mon == 15)) k = 1;
tm.tm_year += k;
tm.tm_mon = tm.tm_mon - 2 - k * 12;
tm.tm_sec = bcd_to_integer(sidate[4]);
tm.tm_min = bcd_to_integer(sidate[3]);
tm.tm_hour = bcd_to_integer(sidate[2]);
return mktime(&tm);
}