有一个时间以MJD和BCD格式表示,有5个字节。我想知道在sqlite数据库中保存这个日期时间的推荐格式是什么,以便用户可以搜索它?
我的第一次尝试是保存它,就像是一个5字节的字符串。用户将使用相同的格式进行搜索,并且用户将使用以下代码将结果转换为unix时间。
但是,稍后,我建议将时间保存在整数 - 例如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 :(得分:0)
使用SQLite date and time functions。
例如,
datetime(MJD + 2400000.5)
试验:
sqlite> select datetime(49987 + 2400000.5);
1995-09-27 00:00:00
答案 1 :(得分:0)
将其另存为UTC。这是你最好的选择。