【问题标题】:Using localtime_s to create a timestamp? And using asctime_s. C++ [duplicate]使用 localtime_s 创建时间戳?并使用 asctime_s。 C++ [重复]
【发布时间】:2015-02-25 18:03:47
【问题描述】:

我正在尝试创建一个时间戳,目前我正在尝试将其输出到屏幕上。

我尝试使用的函数是 localtime_s。

但是我无法让它工作,也找不到任何关于如何使用它的工作示例。

我遇到以下错误:

  1. 错误 1 ​​错误 C2660: 'localtime_s' : 函数不接受 1 个参数
  2. “errno_t”类型的值不能分配给“tm *”类型的实体
  3. “time_t *”类型的参数与“tm *”类型的参数不兼容
  4. 函数调用中的参数太少

        time_t rawtime;
        struct tm * timeinfo;
    
        time(&rawtime);
        timeinfo = localtime_s(&rawtime);
        asctime(timeinfo);
        cout << "Current local time and date: " << timeinfo << endl;
    

谁能给点建议?

编辑

使用解决 cout 问题的答案,Visual Studio 不会让我运行 asctime。所以我尝试使用 asctime_s 然后显示 “没有重载函数“asctime_s”的实例与参数列表匹配,参数类型为:(tm *, time_t *)”

但是,使用指向 timeinfo 和 rawtime 的指针会导致更多错误。

现在的代码是:

    time_t rawtime;
    tm timeinfo;
    errno_t result = localtime_s(&timeinfo, &rawtime);
    cout << "Current local time and date: " << asctime_s(&timeinfo, &rawtime) << endl;

亲切的问候

【问题讨论】:

标签: c++


【解决方案1】:

第一个问题是您没有向localtime_s 传递足够的参数。它需要 两个 参数,但您只传递了一个。第一个参数应该是指向tm 的指针,第二个参数应该是指向time_t 的指针。第二个问题是返回类型是errno_t,而不是指向tm 的指针。您获取当前时间的代码实际上应该是:

time_t rawtime;
tm timeinfo;
errno_t result = localtime_s(&timeinfo, &rawtime);

发送当前时间到cout也有问题。由于没有采用tm 类型的operator&lt;&lt; 的重载版本,您将获得指针的值而不是时间的文本表示。应用上述更改后,您还需要从以下位置更改流输出行:

cout << "Current local time and date: " << timeinfo << endl;

到:

cout << "Current local time and date: " << asctime(&timeinfo) << endl;

任何时候遇到此类问题时,您都应该查看函数签名或参考文档以确定如何正确调用函数。文档通常详细说明参数是什么,它们可以是什么值(即指针是否可以接受 NULL),以及它们的返回值是什么(如果有的话)。在这种情况下,返回值表示错误条件,应检查以确定调用是否成功。

【讨论】:

  • @CaptainOblivious 谢谢这是一个很大的帮助,我不确定第二个参数是什么。现在,当我输出结果时,我得到的是 22 而不是本地时间。此外,我目前正在使用cplusplus.com/reference 作为我的文档,还有其他我应该查看的详细文档吗?再次感谢您的详细回答。
  • 更新了我的答案以涵盖将时间发送到 cout 的问题。
  • @CaptainOblivious 使用答案来解决 cout 问题,Visual Studio 不会让我运行 asctime。因此,我尝试使用 asctime_s,然后显示“没有重载函数的实例”asctime_s”与参数列表匹配,参数类型为:(tm *, time_t *)”但是使用指向 timeinfo 和 rawtime 的指针会导致进一步的错误。
【解决方案2】:

您没有将第二个参数传递给localtime_s

time_t rawtime;
struct tm timeinfo;
errno_t error = localtime_s(&timeinfo, &rawtime);

如果成功则返回zero。如果失败,则返回值为error code。错误代码在Errno.h 中定义。

【讨论】:

    猜你喜欢
    • 2013-07-07
    • 2016-07-11
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多