数据库按日期查询,右侧日期内的数据无法现实问题。

先说问题解决的方法:

  数据库的日期数据查询是根据日期的年、月、日、小时、分钟、秒、毫秒。所以这几项必不可少,如果想查询到右侧日期内数据就需要,右侧的日期它的格式应该是年/月/日 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   }

 

posted @ 2017-02-20 16:42  he伟_li  阅读(180)  评论(0编辑  收藏  举报