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


    先说问题解决的方法:

      数据库的日期数据查询是根据日期的年、月、日、小时、分钟、秒、毫秒。所以这几项必不可少,如果想查询到右侧日期内数据就需要,右侧的日期它的格式应该是年/月/日 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   }
  • 相关阅读:
    OPC客户端的进程安全初始化
    [精华] Oracle安装(linux)总结一下[转]
    Linux防火墙iptables的设置与启动[转]
    Linux Server 5.5安装SVN+Apache服务[转]
    Red hat Linux Enterprise 5.4 Edtion 学习笔记[二]
    RedHat Linux 5企业版开启VNCSERVER远程桌面功能[转]
    Linux服务配置:Vsftp的基本配置[转]
    Linux查看和剔除当前登录用户
    Ubuntu10.04的中文问题汇集与解决[转]
    Linux下扩展swap分区的方法
  • 原文地址:https://www.cnblogs.com/lhwblog/p/6420237.html
Copyright © 2020-2023  润新知