如何在C++中获取当前日期?

21 浏览
0 Comments

如何在C++中获取当前日期?

我一直在尝试在C++中获取当前日期,但是我无法弄清楚我做错了什么。我查看了几个网站,我实施的所有解决方案都会出现一个错误,提示“该函数或变量可能不安全。考虑使用localtime_s替代。”我尝试了找到的几个解决方案(包括下面的一个),但是我无法使它们中的任何一个工作。我做错了什么?

0
0 Comments

你可能会收到这个警告,这可能是因为localtime()不是线程安全的。两个调用此函数的实例可能会导致一些差异。

[...] localtime返回一个指向静态缓冲区(std::tm*)的指针。另一个线程可以调用该函数,而在第一个线程完成读取std::tm*结构体内容之前,静态缓冲区可能会被覆盖。

要解决这个问题,可以使用线程安全的函数localtime_s()来替代localtime()。这个函数接受两个参数,第一个是要填充日期和时间信息的结构体指针,第二个是要获取日期和时间的当前时间。这样,每个线程都有自己的缓冲区,避免了线程之间的冲突。

以下是一个使用localtime_s()获取当前日期的示例代码:

#include 
#include 
int main() {
    std::time_t now = std::time(nullptr);
    std::tm local_time;
    localtime_s(&local_time, &now);
    std::cout << "Current date: " << local_time.tm_year + 1900 << "-"
              << local_time.tm_mon + 1 << "-" << local_time.tm_mday << std::endl;
    return 0;
}

使用localtime_s()可以确保每个线程获取到正确的当前日期,避免了线程之间的冲突和不一致性。

0
0 Comments

问题的出现原因是想要在C++中获取当前日期。为了解决这个问题,可以使用以下代码:

#include 
#include 
int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
  char buffer[80];
  time (&rawtime);
  timeinfo = localtime(&rawtime);
  strftime(buffer,80,"%d-%m-%Y %I:%M:%S",timeinfo);
  std::string str(buffer);
  std::cout << str;
  return 0;
}

这段代码的功能是获取当前日期。它使用了ctime头文件中的time函数来获取当前时间的时间戳,然后使用localtime函数将时间戳转换为本地时间的结构体指针。接下来,使用strftime函数将日期格式化为字符串,并将其存储在缓冲区中。最后,将缓冲区中的字符串转换为std::string类型,并通过std::cout输出。

函数time(time_t* timer)返回当前时间的时间戳,并且如果timer参数不为空指针,则还将该值设置为指针所指的对象。函数的参数timer是指向time_t类型对象的指针,用于存储时间值。如果不需要存储时间值,也可以传递空指针作为参数。

函数的返回值是当前日历时间的time_t对象。如果函数无法获取日历时间,则返回-1。

0
0 Comments

C++中如何获取当前日期?

在C++中获取当前日期的方法如下:

#include "date/tz.h"
#include 
int main()
{
    using namespace std::chrono;
    std::cout << date::make_zoned(date::current_zone(), system_clock::now()) << '\n';
}

这段代码使用了一个C++11/14的可移植、免费、开源的库。这个库是线程安全的,基于``,类型安全且易于使用。如果需要更多功能,这个库都能满足需求,包括获取其他时区的本地时间,直接在不同时区之间转换本地时间,考虑闰秒对时间计算的影响,以及以任意精度无损地进行时间戳的输入和输出等等。此外,这个库还可以搜索所有时区的某个属性(如缩写或偏移量)。

该库目前正在被C++标准委员会提议,可以在这个链接上查看草案。

在上述链接中,可以找到安装这个库的详细说明。

如果在使用过程中出现了“undefined reference to `date::current_zone()`”的错误,并且在`namespace date`中也找不到其声明,那么可能需要先安装该库。具体安装方法请参考上述链接中的Installation部分的说明。

0