获取当前的日期、时间并格式化输出
框1,框2,框3:Static Text控件,修改ID
m_strDate:关联框1,CString数据类型(Value类别)
m_strTime:关联框2,CString数据类型(Value类别)
m_strDateTime:关联框3,CString数据类型(Value类别)
获取按钮消息响应函数:
void CTest17GetTimeDlg::OnGetTime()
{
// TODO: 在此添加控件通知处理程序代码
//UpdateData(true);
CTime m_time;
m_time=CTime::GetCurrentTime(); //获取当前时间日期
m_strDate=m_time.Format(_T("%x")); //格式化日期
m_strTime=m_time.Format(_T("%X")); //格式化时间
m_strDateTime=m_time.Format(_T("%Y-%m-%d %H:%M:%S %A")); //格式化日期时间
UpdateData(false);
}
注:
CTime类表示的是绝对时间,即基于格林威治平均时间(GMT);CTimeSpan则表示的是时间间隔。
GetCurrentTime函数可以获取当前的日期、时间;Format函数则可以将时间、日期格式化。
Format函数的格式符号及其意义:
%a: 简写的星期名,例如Sat代表Saturday
%A: 全写星期(英文),如Friday
%b: 简写的月名,例如Mar代表March
%B: 月份(全写英文),如October
%c: 月/日/年 时:分:秒,如1/3/2012 21:19:11
%d: 月中的天数,值为01~31
%H: 24小时格式的小时数,值为00~23
%I: 通常的12小时格式的小时数,值为01~12
%j: 一年当中的第几天,值为001~336
%m: 月数,值为01~12
%M: 分钟数,值为00~59
%p: 由12小时格式的时钟指示的am/pm(上午/下午)
%S: 秒数,值为00~59
%U: 年中的周数,值为00~53,以周日为一周的第一天
%w: 周中的日期数,值为0~6,其中0为周日
%W: 年中的周数,值为00~53,以周一为一周的第一天
%x: 月/日/年,%c的前半段
%X: 时/分/秒,%c的后半段
%y: 不带年代前缀的年数,值为00~99
%Y: 年份(带世纪,如2006)
%z: 简写的时区名称
%Z: 时区名称的全称,如果时区未知,此字符为空,如“中国标准时间”
==================================================================
来源:http://www.cnblogs.com/52yixin/articles/2111299.html
使用DateTimePicker控件一般是获 取其时间替代手工输入带来的不便,而DateTimePicker控件既可以获取日期(2010-03-05)也可以获取时间(16:27:33),要获 取日期只需要更改控件属性的格式为长日期或短日期,要获取时间则将格式更改为时间即可!
在添加控件变量时,选择其变量类型为CDateTimeCtrl(类如m_DateCtrl);在程序中定义CTime对象用来保存获取的时间,然后可以将其转换为CString类型;具体实现:
CTime time; m_DateCtrl.GetTime(time); CString strTime=time.Format("%Y-%m-%d") //获取到的为日期 如:2010-03-05 CTime time; m_DateCtrl.GetTime(time); CString strTime=time.Format("%H:%M:%S") //获取到的为时间 如:16:27:33
VC2005中DateTimePicker控件的使用
1 显示年月日时分秒的当前时间 CDateTimeCtrl m_DateItmeCtrl_Time; m_DateItmeCtrl_Time.SetFormat(_T("yyyy-MM-dd HH:mm:ss")); CTime TimeTemp=TimeTemp.GetCurrentTime(); m_DateItmeCtrl_Time.SetTime(&TimeTemp); 其中HH表示24小时制,hh表示12小时制 2 如果声明一个控件类型为CTime的变量,那么时间将显示1970-01-01 08:00:00. 3将DateTimePicker控件声明变量类型为COleDateTime COleDateTime转CString CString strTime; COleDateTime dtTime; strTime =dtTime.Format(_T("%Y-%m-%d %H:%M:%S"));
4 CString转COleDateTime(因为VS2005时间日期控件关联的Value变量默认是COleDateTime类型)
1 CString strTime =_T("2009-08-11 11:22:33"); 2 COleVariant VariantTime; 3 VariantTime = strTime; 4 VariantTime.ChangeType(VT_DATE); 5 COleDateTime DataTime = VariantTime;
SetTime时 参数需要为指针
m_ctrlMachineDeliveryDate.SetTime(&CTime::GetCurrentTime()); //将控件显示当前日期 m_ctrlMachineInstallDate.SetTime(&CTime::GetCurrentTime()); CTime tDeliveryDate; m_ctrlMachineDeliveryDate.GetTime(tDeliveryDate); //获取发货日期 pMachineInfoSet->m_MACHINE_DELIVERYDATE = tDeliveryDate; CTime tDeliveryDate; tDeliveryDate = pMachineInfoSet->m_MACHINE_DELIVERYDATE; //获取记录中的日期 m_ctrlMachineDeliveryDate.SetTime(&tDeliveryDate); //将记录中的日期赋值到DateTime控件中显示
// 设定时间日期控件允许选择的范围
CTime tCurrentTime= CTime::GetCurrentTime(); CTimeSpan timespanOneMonth(30,0,0,0); //这里设置为当前日期推后30天 CTime tEndTime = tCurrentTime +timespanOneMonth; m_ctrlADTipsDaysDate.SetRange(&tCurrentTime,&tEndTime); /* m_dtcTm:这个是DATE TIME PICKER控件变量 CTime begin_tm(1970,1,1,8,0,0),end_tm(2038,1,19,3,14,7); m_dtcTm.SetRange(&begin_tm,&end_tm); m_tmClock=CTime::GetCurrentTime();//设置初始值为当前时间 m_dtcTm.SetTime(&m_tmClock); //m_dtcTm.SetFormat("yyyy-MM-dd HH'时'mm'分'"); //设置字符串格式 m_dtcTm.SetFormat("yyyy-MM-dd HH:mm:ss"); */
===================================CString 与 CTime 的相互转化=============================================
C++中,CTime 与 CString转换<转>
一.将CString转为CTime的几种方法
CString timestr = "2000年04月05日";
int a,b,c ;
sscanf(timestr.GetBuffer(timestr.GetLength()),"%d年%d月%d日",&a,&b,&c);
CTime time(a,b,c,0,0,0);
--------or - ---------------------
CString s("2001-8-29 19:06:23");
int nYear, nMonth, nDate, nHour, nMin, nSec;
sscanf(s, "%d-%d-%d %d:%d:%d", &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec);
CTime t(nYear, nMonth, nDate, nHour, nMin, nSec);
---- or ------------------------
CString timestr = "2000年04月05日";
int year,month,day;
BYTE tt[5];
//get year
memset(tt, 0, sizeof(tt));
tt[0] = timestr[0];
tt[1] = timestr[1];
tt[2] = timestr[2];
tt[3] = timestr[3];
year= atoi((char *)tt);
//get month
memset(tt, 0, sizeof(tt));
tt[0] = timestr[6];
tt[1] = timestr[7];
month = atoi((char *)tt);
//get day
memset(tt, 0, sizeof(tt));
tt[0] = timestr[10];
tt[1] = timestr[11];
CTime time(year,month,day,0,0,0);
从上面来看,很明显使用sscanf()函数的优势.
二.将CTIme转换为CString的方法:
CTime tmSCan = CTime::GetCurrentTime();
CString szTime = tmScan.Format("'%Y-%m-%d %H:%M:%S'");
这样得到的日期时间字符串就是以"2006-11-27 23:30:59"的格式.这是不是很方便呢?
//取得CTime中的日期
CString cstrDate = tmScan.Format("%Y-%m-%d");
//取得CTime中的时间
CString cstrTime = tmScan.Format("%H:%M-%S");
sprintf还有个不错的表妹:strftime,专门用于格式化时间字符串的,用法跟她表哥很像,也是一大堆格式控制符,只是毕竟小姑娘家心细,她还要调用者指定缓冲区的最大长度,可能是为了在出现问题时可以推卸责任吧。这里举个例子:
更多更好的sprintf()函数说明参考:《spirntf,你知道多少?》
http://blog.csdn.net/steedhorse/archive/2005/03/25/330206.aspx
time_t t = time(0);
//产生"YYYY-MM-DD hh:mm:ss"格式的字符串。
char s[32];
strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t));
sprintf在MFC中也能找到他的知音:CString::Format,strftime在MFC中自然也有她的同道:CTime::Format,这一对由于从面向对象哪里得到了赞助,用以写出的代码更觉优雅