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:增加了对周数和季度数格式化的支持。