如何将C ++ time_t对象设置为纪元?

时间:2018-05-03 00:10:34

标签: c++ datetime stl

此问题类似于以下内容:

convert epoch to time_t

Converting time_t to int

但我在那里没有得到答案。

如果您想获得当前日期/时间,可以拨打time(0)time(NULL),如以下标准示例所示:

// current date/time based on current system
   time_t now = time(0);

我想定义一个函数,该函数将返回time_t并允许客户端在发生错误时传递可选的默认返回值。此外,我想设置默认值"默认"论点。这在我拥有的库中提供了对称性,它具有跨多种语言的一对一计数器部分,所以我不打算重新设计所有这些。

我的想法是将默认回报设置为纪元。然后,理论上客户可以轻松地评估该回报,并确定回归的时代很可能(如果不是总是)表明它是无效的。我可以想到一些替代方案,但没有什么是干净的,这也符合我现有的模式。

是否有一种简短而又甜蜜的方式使我的函数签名具有此对象的默认值等于纪元?例如

   ...myfunc(...., const time_t &defVal=time(0) );
如果0意味着时代而不是当前的日期/时间,

将是完美的!

2 个答案:

答案 0 :(得分:3)

函数std::time()将自纪元以来的秒数作为std::time_t返回。因此,要在纪元集std::time_t之后找到秒为零:

std::time_t t = 0;

所以你可以这样做:

void myfunc(const std::time_t& defVal = 0)

答案 1 :(得分:2)

使用0有什么问题? (time_t)0表示时代本身(如果您想查找实际的纪元日期/时间,请将(time_t)0传递给gmtime()localtime())。

time_t myfunc(...., time_t defVal = 0 );

或者,您可以改为使用(time_t)-1,这不是有效时间,因为time()在出错时返回(time_t)-1,而time_t代表正< / strong>自纪元以来的秒数。

time_t myfunc(...., time_t defVal = (time_t)-1 );

无论哪种方式都为用户提供了易于比较的内容,如果他们不提供自己的默认值。