先说问题解决的方法:
数据库的日期数据查询是根据日期的年、月、日、小时、分钟、秒、毫秒。所以这几项必不可少,如果想查询到右侧日期内数据就需要,右侧的日期它的格式应该是年/月/日 23:59:59:999,这样才能查询到当天23:59:59:999 以前的信息,也就是当日的所有信息。(999代表的是毫秒)。
今天在开发时候发现了这样一个问题,历史消息管理器中不能当月的31号,如果选择了,就会导致客户端的崩溃,当我找到这个Bug的时候发现,这个就是因为这个原因,可能是当时的时间设置都为0:0:0:0,这样就不得不把整个的日期加1,这样导致什么后果呢,就是要写一个+1的函数,来满足2月闰年,31号,30号这几个特殊的日期,才能保证查询的是第二天之前的消息,其实是很麻烦的。
再贴一段,时间设置的代码,供参考。
1 SYSTEMTIME sysEnd = m_endTime->GetTime(); 2 sysEnd.wHour = 23; 3 sysEnd.wMinute = 59; 4 sysEnd.wSecond = 59; 5 sysEnd.wMilliseconds = 999; 6 CTime start(sysStart); 7 CTime end(sysEnd);
SYSTETIME是程序保存时间采用的类型,CTime是将日期转化为字符串。(想了解可以参照 http://c.biancheng.net/cpp/html/141.html)
再贴自己写的一段无知的日期加一代码吧。
1 SYSTEMTIME EndTime; 2 if (EndTime.wMonth == 2) 3 { 4 if ((EndTime.wYear % 400 == 0) || ((EndTime.wYear % 4 == 0) && (EndTime.wYear % 100 != 0))) 5 { 6 if (EndTime.wDay == 29) 7 { 8 EndTime.wMonth++; 9 EndTime.wDay = 1; 10 } 11 else 12 { 13 EndTime.wDay++; 14 } 15 16 } 17 else 18 { 19 if (EndTime.wDay == 28) 20 { 21 EndTime.wMonth++; 22 EndTime.wDay = 1; 23 } 24 else 25 { 26 EndTime.wDay++; 27 } 28 } 29 } 30 else if (EndTime.wMonth == 1 || EndTime.wMonth == 3 || EndTime.wMonth == 5 || EndTime.wMonth == 7 || EndTime.wMonth == 8 || EndTime.wMonth == 10 || EndTime.wMonth == 12) 31 { 32 if (EndTime.wDay == 31) 33 { 34 if (EndTime.wMonth == 12) 35 { 36 EndTime.wMonth = 1; 37 EndTime.wYear++; 38 EndTime.wDay = 1; 39 } 40 else 41 { 42 EndTime.wMonth++; 43 EndTime.wDay = 1; 44 } 45 46 } 47 else 48 { 49 EndTime.wDay++; 50 } 51 52 } 53 else if (EndTime.wMonth == 4 || EndTime.wMonth == 6 || EndTime.wMonth == 9 || EndTime.wMonth == 11) 54 { 55 if (EndTime.wDay == 30) 56 { 57 EndTime.wMonth++; 58 EndTime.wDay = 1; 59 } 60 else 61 { 62 EndTime.wDay++; 63 } 64 } 65 //Add 星期数同时加一 66 if (EndTime.wDayOfWeek != 7) 67 { 68 EndTime.wDayOfWeek++; 69 } 70 else 71 { 72 EndTime.wDayOfWeek = 1; 73 }