CT imeSpan
CTimeSpan 没 有 基 类 。
-
个 CTimeSpan 对 象 代 表 一 个 相 对 的 时 间 段 。 CTimeSpan 引 入
了 ANSI tim e_t 数 据 及 与 之 相 关 的 运 行 时 函 数 。 这 些 函 数 将 秒 转 换 为 日 , 时 , 分 和 秒 的 各 种 组合 。
-
个 CTimeSpan 对 象 以 秒 为 单 位 保 存 时 间 。 由 于 CTimeSpan 对
象 以 带 符 号 的四 字 节 数 存 储 , 所 以 最 大 的 时 间 跨 度 近 似 为 +-68 年 。
另 外 一 个 与 CTimeSpan 对 应 的 类 是 CTim e, 它 描 述 的 是 绝 对 时 间 。 CTimeSpan
是 两 个 CTime 对 象 之 间 的 差 。
CTime 和 CTimeSpan 类 不 可 派 生 。 因 为 没 有 虚 函 数 , 所 以 CTime 和 CTimeSpan
对 象 的 大 小 都 正 好 是 四 字 节 。 大 多 数 成 员 函 数 都 是 内 联 函 数 。
有 关 使 用 CTime 的 更 多 信 息 , 参 见 “ Visual C++ 程 序 员 指 南 ” 中 的 文 章 “ 日 期和时间”,以 及“ Microsoft Visual C++ 6.0 参考库”的“ Microsoft Visual C++ 6.0 运 行 时 库 参 考 ” 卷 中 的 “ 时 间 管 理 ” 。
#include <afx.h>
请 参 阅 Run-time functions: asctime, _ftime, gmtime, localtime, strftime, time
CTimeSpan 类 成 员
Construction
CTimeSpan 用 不 同 的 方 法 构 造 CtimeSpan 对 象
Extraction
GetDays 返 回 此 CTimeSpan 对 象 中 的 完 整 的 天 数
GetHours 返 回 当 前 日 中 的 小 时 数 ( -23 至 +23 ) GetTotalHours 返 回 此 CTimeSpan. 对 象 中 的 完 整 的 小 时 数GetMinutes 返 回 当 前 小 时 中 的 分 钟 数 ( -59 至 +59 ) GetTotalMinutes 返 回 此 CTimeSpan. 对 象 中 的 完 整 的 分 钟 数GetSeconds 返 回 当 前 分 钟 中 的 秒 数 ( -59 至 +59 ) GetTotalSeconds 返 回 此 CTimeSpan. 对 象 中 的 完 整 的 秒 数
Conversion
Format 将 一 个 CTimeSpan 转 换 为 一 个 格 式 化 的 字 符 串
Operators
Operator = 赋 一 个 新 的 时 间 段 值
Operator +- 加 或 减 去 CTimeSpan 对象
Operator += -= 向 或 从 此 CTimeSpan 中 加 上 或 减 去 一 个 CTimeSpan
对 象
Operator == < etc. 比 较 两 个 相 对 的 时 间 值
Archive/Dump
operator<< 向 CArchive 或 CDumpContext 输 出 一 个 一 个
CTimeSpan 对 象
operator>> 从 CArchive 输 入 一 个 CTimeSpan 对 象
成 员 函 数
CTimeSpan::CTimeSpan
CTimeSpan( );
CTimeSpan( const CTimeSpan& timeSpanSrc ); CTimeSpan( time_t time );
CTimeSpan( LONG lDays , int nHours , int nMins , int nSecs );
参 数
timeSpanSrc
一 个 已 存 在 的 CTimeSpan 对 象 。
time
一个 time_t 时 间 值 。
lDays, nHours, nMins, nSecs
分 别 代 表 日 , 时 , 分 , 秒
说 明
所 有 这 些 构 造 函 数 都 创 建 一 个 新 的 CTimeSpan 对 象 , 并 用 指 定 的 相 对 时 间 值 来对 其 进 行 初 始 化 。 下 面 是 对 每 一 个 构 造 函 数 的 描 述 :
-
CTimeSpan( ); 构 造 一 个 没 有 被 初 始 化 的 CTimeSpan 对 象 。
-
CTimeSpan( const CTimeSpan& ); 从 另 一 个 CTimeSpan 值 构 造 一 个
CTimeSpan 对 象 。
- CTimeSpan( time_t ); 从 一 个 time_t 类 型 构 造 一 个 CTimeSpan
对 象 。 这 个
time_t 值 应 该 是 两 个 绝 对 time_t 值 的 差 。
- CTimeSpan( LONG, int, int, int ); 由 时 间 跨 度 的 组 成 部 分 构
造 一 个
CTimeSpan 对 象 。 每 一 个 成 分 都 受 下 列 范 围 的 限 制 :
C omponent Range
LDays |
0 | 至 |
25,000 ( 近 似 值 ) |
---|---|---|---|
NHours |
0 | 至 |
23 |
N M ins |
0 | 至 |
59 |
NSecs |
0 | 至 |
59 |
注 意 , 如 果 有 一 个 或 多 个 时 间 – 日 成 分 超 出 了 范 围 , 则 Microsoft 基 础 类 库 将 给出 断 言 。 在 调 用 之 前 由 你 负 责 检 验 参 数 是 否 有 效 。
示 例
// CTimeSpan::CTimeSpan 示例CTimeSpan ts1; // 没有初始化的时间值CTimeSpan ts2a( ts1 ); // Copy constructor
CTimeSpan ts2b = ts1; // Copy constructor again CTimeSpan ts3( 100 ); // 100 seconds
CTimeSpan ts4( 0, 1, 5, 12 ); // 1 hour, 5 minutes, and 12 seconds
CTimeSpan::Format
CString Format( LPCSTR pFormat ) const; CString Format( LPCTSTR pFormat ) const; CString Format( UINT nID ) const;
返 回 值
返 回 一 个 包 含 格 式 化 的 时 间 的 CString 对 象 。
参 数
pFormat
一 个 类 似 于 printf 格 式 化 字 符 串 的 格 式 化 字 符 串 。前 面 有 一 个 百 分 号( % ) 标 记 的 格 式 化 代 码 , 将 被 相 应 的 CTimeSpan 成 分 替 换 。 格 式 化 字 符 串 中的 其 它 字 符 被 不 作 变 动 地 拷 贝 到 返 回 字 符 串 中 。 Format 的 格 式 化 代 码 的值 和 意 义 如 下 所 示 :
-
% D 此 CTime 中 的 总 天 数 。
-
% H 当 前 天 的 小 时 。
-
% M 当 前 小 时 中 的 分 钟 。
-
%S 当 前 分 钟 中 的 秒 。
-
% % 百 分 号 。
nID
用 来 表 示 这 个 格 式 的 字 符 串 的 ID 。
说 明
生 成 一 个 对 应 于 此 CTimeSpan 的 格 式 化 字 符 串 。
库 的 调 试 版 检 查 格 式 化 代 码 , 如 果 代 码 不 在 上 面 的 列 表 中 , 则 将 给 出 断 言 。
示 例
// CTimeSpan::Format 示例
CTimeSpan ts( 3, 1, 5, 12 ); // 3 days, 1 hour, 5 min, and 12 sec
CString s = ts.Format( "Total days: %D, hours: %H, mins: %M, secs: %S" ); ASSERT( s == "Total days: 3, hours: 01, mins: 05, secs: 12" );
CTimeSpan::GetDays LONG GetDays( ) const; 说 明
此 成 员 函 数 返 回 完 整 的 天 数 。 如 果 该 时 间 段 是 负 的 , 则 这 个 值 可 能 是 负 的 。
示 例
// CTimeSpan::GetDays 示例
CTimeSpan ts( 3, 1, 5, 12 ); // 3 days, 1 hour, 5 min, and 12 sec ASSERT( ts.GetDays() == 3 );
CTimeSpan::GetHours
int GetHours( ) const;
说 明
此 成 员 函 数 返 回 当 前 日 的 小 时 数 。 其 范 围 是 -23 到 +23 。
示 例
// CTimeSpan::GetHours 示例
CTimeSpan ts( 3, 1, 5, 12 ); // 3 days, 1 hour, 5 min, and 12 sec ASSERT( ts.GetHours() == 1 );
ASSERT( ts.GetMinutes() == 5 );
ASSERT( ts.GetSeconds() == 12 );
CTimeSpan::GetMinutes
int GetMinutes( ) const;
说 明
此 成 员 函 数 返 回 当 前 小 时 中 的 分 钟 数 。 范 围 是 -59 到 59 。
示 例
参 见 GetHours 的 示 例 。
CTimeSpan::GetSeconds
int GetSeconds( ) const;
说 明
此 成 员 函 数 返 回 当 前 分 钟 中 的 秒 数 。 范 围 是 -59 到 59 。
示 例
参 见 GetHours 的 示 例
CTimeSpan::GetTotalHours LONG GetTotalHours( ) const; 说 明
此 成 员 函 数 返 回 此 CTimeSpan 中 的 完 整 小 时 数 。
示 例
// CTimeSpan::GetTotalHours 示例
CTimeSpan ts( 3, 1, 5, 12 ); // 3 days, 1 hour, 5 min, and 12 sec ASSERT( ts.GetTotalHours() == 73 );
ASSERT( ts.GetTotalMinutes() == 4385 ); ASSERT( ts.GetTotalSeconds() == 263112 );
CTimeSpan::GetTotalMinutes LONG GetTotalMinutes( ) const; 说 明
此 成 员 函 数 返 回 此 CTimeSpan 中 的 完 整 分 钟 数 。
示 例
参 见 GetTotalHours 的 示 例 。
CTimeSpan::GetTotalSecond LONG GetTotalSeconds( ) const; 说 明
此 成 员 函 数 返 回 此 CTimeSpan 中 的 完 整 秒 数 。
参 见 GetTotalHours 的 示 例 。
操 作 符
CTimeSpan::operator =
const CTimeSpan& operator =( const CTimeSpan& timeSpanSrc );
说 明
这 些 重 载 的 赋 值 操 作 符 将 源 CTimeSpan timeSpanSrc 对 象 拷 贝 到 此 CTimeSpan
对 象 中 。
// CTimeSpan::operator = 示例
CTimeSpan ts1;
CTimeSpan ts2( 3, 1, 5, 12 ); // 3 days, 1 hour, 5 min, and 12 sec ts1 = ts2;
ASSERT( ts1 == ts2 );
请 参 阅 CTimeSpan::CTimeSpan
CTimeSpan::operator + -
CTimeSpan operator +( CTimeSpan timeSpan ) const; CTimeSpan operator - LCTimeSpan timeSpan ) const;
说 明
这 两 个 操 作 符 允 许 你 将 两 个 CTimeSpan 对 象 相 加 或 相 减 。
// CTimeSpan::operator +, - 示 例
CTimeSpan ts1( 3, 1, 5, 12 ); // 3 days, 1 hour, 5 min, and 12 sec CTimeSpan ts2( 100 ); // 100 seconds
CTimeSpan ts3 = ts1 + ts2;
CTimeSpan::operator += -=
const CTimeSpan& operator +=( CTimeSpan timeSpan ); const CTimeSpan& operator -=( CTimeSpan timeSpan );
说 明
这 些 操 作 符 允 许 你 向 或 从 此 CTimeSpan 中 加 上 或 减 去 一 个 CTimeSpan 对 象 。
示 例
// CTimeSpan::operator +=, -= 示例
CTimeSpan ts1( 10 ); // 10 seconds
CTimeSpan ts2( 100 ); // 100 seconds ts2 -= ts1;
ASSERT( ts2.GetTotalSeconds() == 90 );
CTimeSpan Comparison Operators
BOOL operator ==( CTimeSpan timeSpan ) const; BOOL operator !=( CTimeSpan timeSpan ) const; BOOL operator <( CTimeSpan timeSpan ) const; BOOL operator >( CTimeSpan timeSpan ) const; BOOL operator <=( CTimeSpan timeSpan ) const; BOOL operator >=( CTimeSpan timeSpan ) const;
说 明
这 些 操 作 符 比 较 两 个 相 对 时 间 值 。 如 果 测 试 条 件 为 真 , 则 返 回 非 零 值 ; 否 则 返回 0 。
示 例
// CTimeSpan 比较操作符示例CTimeSpan ts1( 100 ); CTimeSpan ts2( 110 );
ASSERT( ( ts1 != ts2 ) && ( ts1 < ts2 ) && ( ts1 <= ts2 ) );
CTimeSpan::operator <<, >>
friend CDumpContext& AFXAPI operator<<( CDumpContext& dc , CTimeSpan
timeSpan );
friend CArchive& AFXAPI operator<<( CArchive& ar , CTimeSpan timeSpan ); friend CArchive& AFXAPI operator>>( CArchive& ar , CTimeSpan& rtimeSpan );
说 明
CTimeSpan 插 入 操 作 符 ( << ) 支 持 向 一 个 存 档 进 行 诊 断 转 储 和 存 储 。 提 取 操 作符 ( >> ) 支 持 从 一 个 存 档 中 装 入 。
当 你 向 一 个 转 储 环 境 发 送 CTimeSpan 对 象 时 , 时 间 跨 度 以 日 , 时 , 分 和 秒 的 数
字 字 符 格 式 显 示 出 来 。
示 例
// CTimeSpan::operators <<, >> 示 例
CTimeSpan ts( 3, 1, 5, 12 ); // 3 days, 1 hour, 5 min, and 12 sec #ifdef _DEBUG
afxDump << ts << "\n"; #endif
// Prints 'CTimeSpan(3 days, 1 hours, 5 minutes and 12 seconds)'
extern CArchive ar; if( ar.IsLoading( ))
ar >> ts; else
ar << ts;