wzdabenben问到日期时间的处理,其实简单的使用不难,如果要复杂起来还是封装很多的函数才能好用,我只讲一下最基本的日期时间处理方法。
1、如何获取系统日期时间首先要知道wince中的日期是SYSTEMTIME类型,是一个结构。看看这个结构的定义:
- typedef struct _SYSTEMTIME {
- WORD wYear;
- WORD wMonth;
- WORD wDayOfWeek;
- WORD wDay;
- WORD wHour;
- WORD wMinute;
- WORD wSecond;
- WORD wMilliseconds;
- } SYSTEMTIME, *LPSYSTEMTIME;
复制代码很明显这个结构已经定义了主要的日期和时间的表示值,有了这个结构下一步就是要了解如何通过这个结构来获取系统当前时间。
获取Wince的日期是通过一个API函数GetLocalTime来实现,此函数就是获取当前系统设置的日期时间,在获取后就包含了小时制式,比如12小时还是24小时,举个获取时间的代码例子:
- SYSTEMTIME sysTime;
- GetLocalTime(&sysTime);
复制代码这段代码先是申明了一个系统日期时间变量,然后调用FetLocalTime来获取,到这一步获取就完成了。
2、如何处理成字符串看到 SYSTEMTIME 结构中对年、月、日等都是用WORD来表示的,而WORD这个数据类型的定义如下:
typedef unsigned short WORD;
是个无符号短整形,需要转换为字符串来显示,转换可以拿wsprintf来格式化输出。
在转换之前先考虑一个问题,在平时写程序时,可能会有这样的需求:显示当前的日期不包含时间,或者是反过来,想到这就可以进行一下简单的封装,形成三个函数:Now(), Date(), Time()。这样就可以分别获取当前日期时间、日期、时间,省去了很多事情。下面就按这个思路放出三个函数:
- //获取当前日期
- //返回值:当前系统日期,格式:2009-12-11
- CMzString Date()
- {
- SYSTEMTIME sysTime;
- GetLocalTime(&sysTime);
- CMzString sDate;
- wsprintf(sDate.C_Str(), L"%4d-%02d-%02d", sysTime.wYear, sysTime.wMonth, sysTime.wDay);
- return sDate;
- }
- //获取当前时间
- //返回值:当前系统时间,格式:12:12:15
- CMzString Time()
- {
- SYSTEMTIME sysTime;
- GetLocalTime(&sysTime);
- CMzString sTime;
- wsprintf(sTime.C_Str(), L"%02d:%02d:%02d.%03d" , sysTime.wHour, sysTime.wMinute,sysTime.wSecond,sysTime.wMilliseconds);
- return sTime;
- }
- //获取当前时间
- CMzString Now()
- {
- CMzString sDateTime, sDate, sTime;
- sDate = Date();
- sTime = Time();
- sDateTime = sDate + L" " + sTime;
- return sDateTime;
- }
复制代码可以看到第一个函数Date是用于取当前系统日期的,这此使用了魅族的CMzString作为输出值,看看wsprintf在这里的作用吧:
- wsprintf(sDate.C_Str(), L"%4d-%02d-%02d", sysTime.wYear, sysTime.wMonth, sysTime.wDay);
复制代码三个函数完成,接下来就是调用了。
3、显示日期时间通过显示日期时间来调用第2点列出的日期函数:
- MzMessageBoxEx(m_hWnd, Now(), L"提醒");
- MzMessageBoxEx(m_hWnd, Date(), L"提醒");
- MzMessageBoxEx(m_hWnd, Time(), L"提醒");
复制代码去试试效果吧。^_^