CTime( ) throw( );

CTime(

   __time64_t time

) throw( );

CTime(

   int nYear,

   int nMonth,

   int nDay,

   int nHour,

   int nMin,

   int nSec,

      int nDST = -1

);

CTime(

   WORD wDosDate,

   WORD wDosTime,

   int nDST = -1

);

CTime(

   const SYSTEMTIME& st,

   int nDST = - 1

) throw( );

CTime(

   const FILETIME& ft,

   int nDST = - 1

);

CTime(

   const DBTIMESTAMP& dbts,

   int nDST = -1

) throw( );

nDST

Indicates whether daylight savings time is in effect. Can have one of three values:

  • nDST set to 0   Standard time is in effect.
  • nDST set to a value greater than 0   Daylight savings time is in effect.
  • nDST set to a value less than 0   The default. Automatically computes whether standard time or daylight savings time is in effect.

 

初始化      m_begintime=CTime(2004,1,1,0,0,0,-1);//参数依次为

year,month,day,hour,minite,second,nDST

 m_endtime =CTime::GetCurrentTime();//当前时间

2.日期比较

CTimeSpan span;

span=time1-time2;

得到两时间的间隔.

可以取得span.GetHours().等

3.access数据库查询

使用DateDiff()函数,具体参照access帮助

CString timesql;

timesql.Format(" Where DateDiff('d',%s,'%s')<=0","日期",m_begintime.Format("%Y-%m-%d"));

4读取日期字段(odbc)

     CDBVariant var;

      recset.GetFieldValue(i,var);

     s.Format("%d-%d-%d",(var.m_pdate)->year,(var.m_pdate)->month,

      (var.m_pdate)->day);

5.CTime转换为CString

   例:

    m_begintime.Format("%Y-%m-%d");// 2004-10-03

6.CString转换为CTime

     //s="2004-10-5"

    int first=s.Find('-');

    int second=s.Find('-',first+1);

    int year=atoi(s.Left(4));

    int month=atoi(s.Mid(first+1,second-first+1));

    int day=atoi(s.Mid(second+1,s.GetLength()-second-1));

    CTime temp(year,month,day,0,0,0);

7.判断CString是否表示的正确日期格式

//判断是否为2004-01-13   ch 可代表其他分隔符

bool IsDate(CString str,char ch)

{

if(str.IsEmpty()) return false;

//日期分段

int first=str.Find(ch);

int second=str.Find(ch,first+1);

int year=atoi(str.Left(4));

int month=atoi(str.Mid(first+1,second-first+1));

int day=atoi(str.Mid(second+1,str.GetLength()-second-1));

     //判断

if (year < 2000 || year >= 2010)

{

   return false;

}

else if (month< 1 || month >12)

{

   return false;

}

else if (day< 1 || day > 31)

{

   return false;

}

else if (month == 4 || month == 6 || month == 9 || month == 11)

{

   if(day > 30)

   {

    return false;

   }

   else

   {

    return true;

   }

}

else if (month == '2')

{

   if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)

   {

    if (day>29)

    {

     return false;

    }

    else

    {

     return true;

    }

   }

   else if (day>28)

   {

    return false;

   }

   return true;

}

else

{

   return true;

}

     }

 

用VC编写数据库程序不可避免的会遇到_bstr_t 、CString 、CTime这几个类型之间的转换问题,令人头疼。

今早上终于算是解决了CString和CTime的类型转换问题。

//CTime--〉CString

CTime t;

t=CTime::GetCurrentTime();

CString sur;

sur.Format("%s",t.Format("%Y-%m-%d"));

MessageBox(sur);

//long --> CString

long a ;

CString b;

b.format("%ld",a);

//double --->CString

double a;

CString b;

b.format("%f",a);

//CString--〉CTime

CString sur;

sur="2006-08-09";

COleDateTime time1;

time1.ParseDateTime(sur);

SYSTEMTIME systime;

VariantTimeToSystemTime(time1, &systime);

CTime tm(systime);

m_time=tm;

UpdateData(false);

CString和int,float之间的转换。

1。int <->CString

1) int ->CString

int n = 1;

CString str;

str.Format("%d",n);

2) CString->int

CString str = "1";

int n = atoi(str.GetBuffer(0));

2. char* 与CString

1)char*->CString

char sz[128];

CString str;

str.Format("%s",sz);

2) CString -> char*

CString str;

int nLength = str.GetLength();

char* sz = new char[nLength];

sz = str.GetBuffer(0);

3. float<->CString

1)float->CString

float f = 0.0;

CString str;

str.Format("%f",f);

2) CString->float

CString str = "0.0";

float f = atof(str.GetBuffer(0));

Format函数第一个参数是要转的那个数的类型

 

FileTime 和 CTime之间的转换问题

 

1. FileTime 转换成 CTime

方法(1)

FILETIME ft;

CTime time(ft);

方法(2)

FILETIME ft;

SYSTEMTIME st;

BOOL bSuccess=::FileTimeToSystemTime(&ft, &st)

if (bSuccess) //转换为SYSTEMTIME成功,下面转换成CTime

CTime time(st);

2. CTime 转换成 FileTime

CTime time(CTime::GetCurrentTime());

SYSTEMTIME st;

time.GetAsSystemTime(st);

FILETIME ft;

::SystemTimeToFileTime(&st, &ft);