【问题标题】:C++ How can I convert a date in year-month-day format to a unix epoch format?C++ 如何将年月日格式的日期转换为 unix 纪元格式?
【发布时间】:2010-10-22 20:29:37
【问题描述】:

我需要将给定的日期转换为包含自 1970 年 1 月 1 日以来的毫秒数的 int。(unix 纪元)

我尝试了以下代码:

tm lDate;

lDate.tm_sec = 0;  
lDate.tm_min = 0;  
lDate.tm_hour = 0;  
lDate.tm_mday = 1;  
lDate.tm_mon = 10;  
lDate.tm_year = 2010 - 1900;  

time_t lTimeEpoch = mktime(&lDate);

cout << "Epoch: " << lTimeEpoch << endl;

结果是 Epoch: 1288584000 对应于 Mon, 01 Nov 2010 04:00:00 GMT

编辑:我期待 2010 年 10 月 1 日,显然 tm_mon 是自一月以来的月数, 所以正确的行是 lDate.tm_mon = 10 -1;

【问题讨论】:

  • 你刚刚做了,那有什么问题?具体来说,你得到的和你想要的有什么不同?
  • 您期待什么答案(以 DD MM YYYY 等表示法)?

标签: c++ time


【解决方案1】:

如手册页中所述,tm_mon 为: 自一月以来的月数,范围为 0 到 11。

【讨论】:

    【解决方案2】:

    您可能会对时区感到困惑。我认为您在手册页中错过了这一点:

    mktime() 函数转换分解的时间结构,表示为当地时间...

    【讨论】:

    • 所描述的问题是按月计算的,而不是按小时计算的。
    • @Benoit Thiery:OP 已经编辑了他的帖子:当我发布这个答案时,OP 没有说明他得到的输出有什么问题。你的帖子让我发布了评论,询问他期待什么日期,因为我觉得时区或月份的答案都是可能的。
    • 好吧对不起,我错过了历史。在这种情况下,您可能希望删除答案,但这取决于您。
    猜你喜欢
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 2021-04-12
    • 2021-07-25
    • 2014-01-25
    • 2014-06-17
    相关资源
    最近更新 更多