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;