eMbedded Visual C++ 3.0Pocket PC 2002eVCWindows MobileWindows 2000Visual C++ 6.0MFC中级开发Visual StudioWindowsC++
日期和时间格式化器






4.56/5 (9投票s)
一个使用标准格式代码将 COleDateTime 对象格式化为字符串的类。
引言
这个类将 COleDateTime 对象格式化为字符串。它使用常用的格式化选项,如 MM-dd-yy 或 hh:mm:ss。
背景
没有单个 Win32 API 函数可以在同一位置同时处理日期和时间格式化。 Win32 API 支持 GetDateFormat 和 GetTimeFormat 函数,但它们必须单独使用。更糟糕的是,如果程序员想为用户提供单个日期和时间格式化字符串,他或她将不得不将其拆分并为每个函数提供其格式字符串的一部分。 创建此类是为了解决这个问题。
使用该类
这个类的使用非常简单。首先实例化一个 CDateTimeFormat 对象
CDateTimeFormat dtf;
此对象可用于多个格式。第二件事是设置 COleDateTime 对象
dtf.SetDateTime(odtDateTime);
此方法采用引用以提高速度。接下来,您设置格式字符串
dtf.SetFormat(_T("MM-dd-yyyy"));
现在,您只需要使用以下方法获取格式化后的字符串:
CString strFormat = dtf.GetString();
如果您不想在检索格式化字符串时支付 CString 副本的费用,您还可以通过使用以下方法为对象提供指向您的 TCHAR 缓冲区的指针:
TCHAR szMyBuffer[256]; dtf.SetFormatBuf(szMyBuffer);
您应该为格式字符串分配足够的空间。格式对象中的默认分配是 256 个字符。
格式化语法
格式化语法基于 DateTimePicker 控件。下表(从 MSDN 转录)包含所有支持的格式化控件
| 元素 | 描述 | 
| d | 一位或两位数的日期。 | 
| dd | 两位数的日期。单日值前面有一个零。 | 
| ddd | 三个字符的星期几缩写。 | 
| dddd | 全星期几名称。 | 
| w | 单或双位数周数。 | 
| ww | 双位数周数。 | 
| h | 12 小时制中一位或两位数的小时数。 | 
| hh | 12 小时制中两位数的小时数。单数位值前面有一个零。 | 
| H | 24 小时制中一位或两位数的小时数。 | 
| HH | 24 小时制中两位数的小时数。单数位值前面有一个零。 | 
| m | 一位或两位数的分钟数。 | 
| mm | 两位数的分钟数。单数位值前面有一个零。 | 
| M | 一位或两位数的月份数。 | 
| MM | 两位数的月份数。单数位值前面有一个零。 | 
| MMM | 三个字符的月份缩写。 | 
| MMMM | 全月名称。 | 
| q | 单数字季度数。 | 
| t | 一个字母的 AM/PM 缩写(即,AM 显示为“A”)。 | 
| tt | 两个字母的 AM/PM 缩写(即,AM 显示为“AM”)。 | 
| yy | 年份的后两位数(即,1996 将显示为“96”)。 | 
| yyyy | 完整的年份(即,1996 将显示为“1996”)。 | 
| ' | 进入字面模式。所有字符都会被复制到格式字符串,直到下一个单引号。 | 
| \ | 仅为下一个字符进入字面模式(转义)。 | 
区域设置使用
此类大量使用了 GetLocaleInfo API,使用 LOCALE_SYSTEM_DEFAULT。这可以更改以满足您的需求。
速度优化
速度可以通过在第一次实例化时预缓存所有区域设置数据来优化。这将在下一个版本中添加。
修订
- 2003-02-20:增加了对周数和季度数格式化的支持。


