none
關於SYSTEMTIME和GetLocakTime(); RRS feed

  • 问题

  • 我準備寫一個計算相對時間的函數..其中有用到SYSTEMTIME和GetLocakTime();這兩個。用的是VS2008

    #include<string>
    #include<strstream>
    #include<iostream>
    #include<sstream>
    #include<Windows.h>
    #include<Winbase.h>

    using namespace std;

    //是否為閏年
    bool isLeapYear(int year){
     return (year%4==0 && year%100!=0)||(year%400==0);
    }

    //計算相應的月份的日子數
    int dayofmonth(int year,int month){
     int day=0;
     if(month==2){
      if(isLeapYear(year)){
       day=29;
       return day;
      }
      else{
       day=28;
       return day;
      }
     }
     if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
      day=31;
      return day;
     }
     day=30;
     return day;
    }

    //計算差距時間
    int CountTime(string tasktime){
     int year=atoi(tasktime.substr(0,4).c_str());    //從string中提取日期 日期的格式為XXXX-XX-XX
     int month=atoi(tasktime.substr(5,2).c_str());
     int day=atoi(tasktime.substr(8,2).c_str());
     int val=0;
        SYSTEMTIME Systime;   
        GetLocalTime(&Systime);   //獲得系統時間
     if(year==Systime.wYear){     //如果年份相同
      if(month==Systime.wMonth)    //如果月份相同
      {
       if(day==Systime.wDay)   //好吧,如果日期也相同
        return 0;
       else{
       val=day-Systime.wDay;  
       return val;
       }
      }
      else
      {
        if(Systime.wMonth<month){                          
         val=dayofmonth(Systime.wYear,Systime.wMonth)-Systime.wDay;
         Systime.wMonth++;
         for(;Systime.wMonth!=month;Systime.wMonth++){
          val=val+dayofmonth(Systime.wYear,Systime.wMonth);
         }
         val=val+day;
         return val;
        }
        else{
         val=dayofmonth(year,month)-day;
         month++;
         for(;month!=Systime.wMonth;month++){
          val=val+dayofmonth(year,month);
         }
         val=val+Systime.wDay;
         val=val-(val*2);
         return val;
        }
      }
     }
     else{
      if(Systime.wYear<year){
       val=dayofmonth(Systime.wYear,Systime.wMonth)-Systime.wDay;
       Systime.wMonth++;
       for(;Systime.wMonth<=12;Systime.wMonth++){
        val=val+dayofmonth(Systime.wYear,Systime.wMonth);
       }
       for(int i=1;i!=month;i++){
        val=val+dayofmonth(year,i);
       }
       val=val+day;
       return val;
      }
      else{
       val=dayofmonth(year,month)-day;
       month++;
       for(;month<=12;month++){
        val=val+dayofmonth(year,month);
       }
       for(int i=1;i!=Systime.wMonth;i++){
        val=val+dayofmonth(Systime.wYear,i);
       }
       val=val+day;
       val=val-(val*2);
       return val;
      }
     }   
    }

    但是會報錯很多,以下是這幾大類的...

    错误 1 error C2872: “IDataObject”: 不明确的符号 C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h 5934 sad
    错误 2 error C3699: “*”: 不能在类型“IDataObject”上使用此间接寻址 C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h 5934 sad
    错误 3 error C2371: “IDataObject”: 重定义;不同的基类型 C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h 5948 sad
    错误 9 error C2872: “IMessageFilter”: 不明确的符号 C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h 6282 sad
    错误 10 error C3699: “*”: 不能在类型“IMessageFilter”上使用此间接寻址 C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h 6282 sad
    错误 11 error C2371: “IMessageFilter”: 重定义;不同的基类型 C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h 6328 sad
    错误 13 error C2872: “IDataObject”: 不明确的符号 C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h 12677 sad
    错误 22 error C3699: “*”: 不能在类型“IDropTarget”上使用此间接寻址 c:\program files\microsoft sdks\windows\v6.0a\include\oleidl.h 3288 sad
    错误 21 error C2872: “IDropTarget”: 不明确的符号 c:\program files\microsoft sdks\windows\v6.0a\include\oleidl.h 3288 sad
    错误 27 error C3699: “*”: 不能在类型“IServiceProvider”上使用此间接寻址 c:\program files\microsoft sdks\windows\v6.0a\include\servprov.h 96 sad
    错误 32 error C2872: “IServiceProvider”: 不明确的符号 C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\urlmon.h 5854 sad

    不知道如何解決,望各位幫我看看謝謝....

    2010年11月29日 5:22

答案

  • 我用VS2010创建了一个空的Solution,把你的代码拷贝到里边(一个最最普通的cpp文件),只不过加了一个void main函数。一切编译通过。可见程序通过编译是没有问题的。不清楚你是否存在库函数问题或者其它的。建议修复(到控制面板去点击vs2008修复)试试看。或者索性用vs2010.
       val=val+day;
       val=val-(val*2);
       return val;
      }
     }  
    }

    void main()
    {
    }

    2010年11月30日 3:41
    版主

全部回复

  • 我用VS2010创建了一个空的Solution,把你的代码拷贝到里边(一个最最普通的cpp文件),只不过加了一个void main函数。一切编译通过。可见程序通过编译是没有问题的。不清楚你是否存在库函数问题或者其它的。建议修复(到控制面板去点击vs2008修复)试试看。或者索性用vs2010.
       val=val+day;
       val=val-(val*2);
       return val;
      }
     }  
    }

    void main()
    {
    }

    2010年11月30日 3:41
    版主
  • 先谢谢Don_Wei前辈的回复。

    我创建的是WIMDOWS窗体应用类型的..不是空项目。- -其中使用了一些窗体设计。不知道什么不是这个的原因呢?

     

    我点报错信心定位在objidl.h和servprov.h这两个头文件中..但是他们又是系统头文件,不能修改。

    2010年11月30日 4:25