65.9K
CodeProject 正在变化。 阅读更多。
Home

日期和时间格式化器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.56/5 (9投票s)

2003年2月7日

CPOL

3分钟阅读

viewsIcon

127798

downloadIcon

441

一个使用标准格式代码将 COleDateTime 对象格式化为字符串的类。

引言

这个类将 COleDateTime 对象格式化为字符串。它使用常用的格式化选项,如 MM-dd-yy 或 hh:mm:ss。

背景

没有单个 Win32 API 函数可以在同一位置同时处理日期和时间格式化。 Win32 API 支持 GetDateFormatGetTimeFormat 函数,但它们必须单独使用。更糟糕的是,如果程序员想为用户提供单个日期和时间格式化字符串,他或她将不得不将其拆分并为每个函数提供其格式字符串的一部分。 创建此类是为了解决这个问题。

使用该类

这个类的使用非常简单。首先实例化一个 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:增加了对周数和季度数格式化的支持。
© . All rights reserved.