【问题标题】:convert COleDateTime to ticks or integer representation将 COleDateTime 转换为刻度或整数表示
【发布时间】:2012-10-17 06:25:55
【问题描述】:

如何将 COleDateTime 转换为某种可以轻松转换回来的整数表示。

【问题讨论】:

  • COleDateTime::m_dt 存储一个双精度值,表示相对于 1899 年 12 月 30 日午夜的天数。如果转换为 int,则会丢失精度。
  • 如果您不关心值,除了反向转换任务,您可以将该 double 转换为 64 位整数。

标签: c++ mfc atl


【解决方案1】:

我认为最简单的方法是通过COleDateTimeSpan 如下:

// Create an epoch
static COleDateTime epoch( 2000, 1, 1, 0, 0, 0 );

// Convert to integer
COleDateTime someTime;    // initialize it from somewhere
__int64 nOleDateTimeAsInt = static_cast<__int64>( (someTime - epoch).totalSeconds() );

// Create from integer
COleDateTimeSpan span( nOleDateTimeAsInt / SecondsInDay,
    (nOleDateTime % SecondsInDay) / SecondsInHour,
    (nOleDateTime % SecondsInHour) / SecondsInMinute,
    (nOleDateTime % SecondsInMinute) );
COleDateTime someTime( epoch + span );

【讨论】:

  • 如果您使用 1970-01-01 的纪元,您将匹配 Unix time
  • @MarkRansom 我只需要一个纪元,它可以是任何时间,但你是对的,1970-01-01 是 C 程序员和 POSIX 时间的圣日
  • 注意正确的函数调用是GetTotalSeconds()而不是totalSeconds()。不确定自从答案发布到现在 API 是否发生了变化。 Link to documentation
猜你喜欢
  • 2011-12-07
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多