demo代码示例:
// testTime.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <atltime.h> // CTime, CTimeSpan #include <ATLComTime.h> // COleDateTime COleDateTimeSpan #include <time.h> // COleDateTime比CTime更有优势,推荐统一使用ATLComTime.h中的导出类 int _tmain(int argc, _TCHAR* argv[]) { CString strDate = L"2013-10-22"; //int nYear = 1971, nMonth = 1, nDay = 1, nHour = 0, nMin = 0, nSec = 0; COleDateTime dt; CString strCurTime = dt.Format(L"%Y-%m-%d %H:%M:%S"); CTime curTime = CTime::GetCurrentTime(); CString strCurTime2 = curTime.Format(L"%Y-%m-%d %H:%M:%S"); bool ret = dt.ParseDateTime(strDate, VAR_DATEVALUEONLY); CTime oldTime = CTime(dt.GetYear(), dt.GetMonth(), dt.GetDay(), 11, 0, 0); CTimeSpan timespan = curTime - oldTime; int nDayInterval = timespan.GetDays(); int nHourInterval = timespan.GetHours(); int nMinuteInterval = timespan.GetMinutes(); int nSecInterval = timespan.GetSeconds(); //struct tm st = {0}; time_t t = time(NULL); COleDateTime oleDate(t); CString strTimeFromAtl = oleDate.Format(L"%Y-%m-%d %H:%M:%S"); system("puase"); //if (ret) //{ //if (dt.GetYear() >= 2012) //{ //nYear = dt.GetYear(); //nMonth = dt.GetMonth(); //nDay = dt.GetDay(); //nHour = dt.GetHour(); //nMin = dt.GetMinute(); //nSec = dt.GetSecond(); //} //} // Demo2 //COleDateTime cur_time; //cur_time.SetDate(2013, 10, 21); //cur_time.SetTime(12, 0, 0); //CString strCurTime = cur_time.Format(L"%y/%m/%d"); // Demo1 //CTime date_time = CTime::GetCurrentTime(); //CTime old_time = date_time - CTimeSpan(2, 2, 2, 2); //CString strOldTime = old_time.Format(L"%y-%m-%d %H:%M:%S"); //CTimeSpan time_span = date_time - old_time; //int day = time_span.GetDays(); return 0; }
使用COleDateTime类
1) 获取当前时间。
CTime time;
time = CTime::GetCurrentTime();
2) 获取时间元素。
int year = time.GetYear() ;
int month = time.GetMonth();
int day = time.GetDay();
int hour = time.GetHour();
int minute = time.GetMinute();
int second = time.GetSecond();
int DayOfWeek = time.GetDayOfWeek() ;
3) 获取时间间隔。
CTimeSpan timespan(0,0,1,0); // days,hours,minutes,seconds
timespan = CTime::GetCurrentTime() - time;
4) 把时间转换为字符串。
CString sDate,sTime,sElapsed Time ;
sDate = time.Format("%m/%d/%y"); //ex: 12/10/98
sTime = time.Format("%H:%M:%S"); //ex: 9:12:02
sElapsed Time = timespan.Format("%D:%H:%M:%S"); // %D is total elapsed days
5) 把字符串转换为时间。
CString sDateTime;
int nYear, nMonth, nDate, nHour, nMin, nSec;
sscanf(sDateTime, "%d-%d-%d %d:%d:%d", &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec);
CTime sTime(nYear, nMonth, nDate, nHour, nMin, nSec);
要想知道更多的时间格式,参见MFC文档中的strftime
使用COleDateTime类
1) 获得一年中的某一天。
COleDateTime datetime;
datetime = COleDateTime::GetCurrentTime();
int DayOfYear = datetime.GetDayOfYear();
2) 从文本串中读取时间。
COleDateTime datetime;
datetime.ParseDateTime("12:12:23 27 January 93");
3) 获取时间间隔。
//比方计算日期差
COleDateTime begin_date(1970, 1, 1, 0, 0, 0);
COleDateTime end_date(1990, 1, 1, 0, 0, 0);
COleDateTimeSpan timeSpan; //计算时间差
timeSpan = end_date - begin_date;
long expi_date = timeSpan.GetDays();
说明
■ CTime和COleDateTime具有几乎同样的功能。然而,COleDateTime允许用户获得一年中的某一天(创建Julian日期的一种好方法),以及分析一个时间文本串。
■ 与CTime相比, COleDateTime的优点在于它支持DWORD变量。COleDateTime使用的位数是双浮点的两倍,既然CTime只是简单地计算从1970年1月1日之后经过的秒数,所以到了2037年它将达到4294967295,从而不能再使用。相反,COleDateTime是一个
浮点数,它表示是从1900年12月30号之后的天数(小时是天的小数部分),几千年之内不会溢出。
补充:
一、COleDateTime
.Net有DateTime类用来处理日期时间,很方便,VC则可以用ATL库的COleDateTime类,用起来也还不错:
首先包含相关的头文件:
#include <ATLComTime.h>
初始化COleDateTime实例:
COleDateTime date_time;
date_time.SetDate(Year, Month, Day);
date_time.SetTime(Hour, Minute, Second);
COleDateTime重载了+,-,+=,-=等运算符,可以方便的让时间日期前进倒退,操作对象为COleDateTimeSpan,如:
date_time += COleDateTimeSpan(Day, Hour, Minute, Second); //天,时,分,秒
COleDateTime还可以将一个有效的时间字符串Parse过来,初始化实例本身:
date_time.ParseDateTime(CString("2008-04-18 09:00:00"));
反过来,COleDateTime可以Format成一个时间日期格式的字符串CString:
date_time.Format(L"%Y%m%d"); // 年,月,日, 注意m大写表示分钟Minute
二、CString
CString用法比较简单,可是有些用法长期不用会忘掉,为了下次要用的时候能快速通过经验找到答案,所以还是写下一些东西。
CString 有个Format成员,能转化成一个CString,参数跟C的printf用法差不多,如:
CString str;
str.Format("%s%d%02i", CString("Example"), 9, 1);// 第一个参数string,第二个Signed十进制数,第三个是宽度为2,不够则以0填充的Signed十进制数,
因此操作之后str的值为:
Expample901
CTime COleDateTime的常用操作和比较(转)
1) 获取当前时间。
datetime = COleDateTime::GetCurrentTime();
CTime和COleDateTime具有几乎同样的功能。
与CTime相比, COleDateTime的优点在于它支持DWORD变量。
COleDateTime使用的位数是双浮点的两倍,既然CTime只是简单地计算从1970年1月1日之后经过的秒数,所以到了2 0 3 7年它将达到4 2 9 4 9 6 7 2 9 5,从而不能再使用。
//CString--->COleDateTime
COleVariant vtime(strCString);COleDateTime time4=vtime;
//CTime--->time_t
COleDateTime time3(time2);
//time_t--->COleDateTime.
CString COleDateTime CTime互相转换
strCString="2003-10-27 6:24:37"; //CString--->COleDateTime
COleVariant vtime(strCString);
vtime.ChangeType(VT_DATE);
COleDateTime time4=vtime;
COleDateTime time1(1977,4,16,2,2,2); //COleDataTime--->CTime
SYSTEMTIME systime;
VariantTimeToSystemTime(time1, &systime);
CTime tm(systime);
time_t time2=tm.GetTime(); //CTime--->time_t
COleDateTime time3(time2); //time_t--->COleDateTime
CString str = tDate.Format(_T("%Y-%m-%d"));
【出处】http://blog.csdn.net/zhaodan19861107/article/details/7237142