【问题标题】:Unexpected value returned from mktime() [duplicate]从 mktime() 返回的意外值 [重复]
【发布时间】:2017-05-02 05:56:38
【问题描述】:

我准备了以下结构:

struct tm tDepartureTime;
tDepartureTime.tm_min = 24;
tDepartureTime.tm_hour = 13;
tDepartureTime.tm_mday = 11;
tDepartureTime.tm_mon = 2 - 1;
tDepartureTime.tm_year = 2017 - 1900;

然后我使用 mktime() 来获取秒数。

unsigned long qTime = mktime( &tDepartureTime );

但它返回我的数字 1731157832 相当于 09.11.2024 的时间戳。 哪里可能有问题?

【问题讨论】:

  • 您打算将日期定在 2017 年 2 月吗? (tm_mon 的值从一月的 0 到十二月的 11。)
  • @JonathanLeffler,是的,乔纳森,它是为二月准备的。无论如何,谢谢你通知我。
  • 好的。由于您写了2017 - 1900 但没有写2 - 1 我不确定,但这并没有对您的问题产生实质性影响

标签: c++ c time timestamp mktime


【解决方案1】:

tm 结构的某些字段未初始化。具体来说,这些是tm_sectm_mdaytm_wdaytm_ydaytm_isdst

其中,您至少需要手动设置tm_sec。如果它的值随机地最终变得非常高,那就说明时间还很遥远。

您还可以通过将第一行更改为struct tm tDepartureTime = {0} 来用零初始化整个结构。这可能是最好的解决方案。

【讨论】:

  • tm_wdaytm_yday 的值无关紧要,它们被设置为调用 mktime() 的副作用。该值是为tm_mday 设置的。正如您所说的那样,tm_sec 中的值未设置,实际存在的值可能非常大。
猜你喜欢
  • 2020-09-04
  • 1970-01-01
  • 2015-09-12
  • 2016-10-09
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2021-08-28
相关资源
最近更新 更多