2010-06-07 5 views
0

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); 
} 

답변

0

SQLite date and time functions을 사용하십시오. 예를 들어

,

datetime(MJD + 2400000.5) 

시험 : UTC로 저장

sqlite> select datetime(49987 + 2400000.5); 
1995-09-27 00:00:00 
관련 문제