在c++中是否有跨平台的方法来获取当前的日期和时间?
当前回答
http://www.cplusplus.com/reference/ctime/strftime/
这个内置功能似乎提供了一组合理的选项。
其他回答
老问题的新答案:
这个问题没有指定在哪个时区。有两种合理的可能性:
在UTC。 在计算机的本地时区。
对于1,你可以使用这个日期库和下面的程序:
#include "date.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
std::cout << system_clock::now() << '\n';
}
这对我来说只是输出:
2015-08-18 22:08:18.944211
日期库本质上只是为std::chrono::system_clock::time_point添加了一个流操作符。它还添加了许多其他不错的功能,但在这个简单的程序中没有使用这些功能。
如果您更喜欢2(本地时间),则有一个timezone库构建在日期库之上。这两个库都是开源和跨平台的,假设编译器支持c++ 11或c++ 14。
#include "tz.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
auto local = make_zoned(current_zone(), system_clock::now());
std::cout << local << '\n';
}
这对我来说只是输出:
2015-08-18 18:08:18.944211 EDT
make_zoned的结果类型是一个date::zoned_time,它是一个date::time_zone和std::chrono::system_clock::time_point的配对。这个时间对表示本地时间,但也可以表示UTC,这取决于您如何查询它。
通过上面的输出,您可以看到我的计算机目前处于UTC偏移量为-4h的时区,以及EDT的缩写。
如果需要使用其他时区,也可以实现这一点。例如,要查找澳大利亚悉尼的当前时间,只需将变量local的构造更改为:
auto local = make_zoned("Australia/Sydney", system_clock::now());
输出变为:
2015-08-19 08:08:18.944211 AEST
适用于c++ 20
这个库现在在c++ 20中被广泛采用。命名空间date已经消失,现在所有内容都在命名空间std::chrono中。并使用zoned_time代替make_time。删除标题“date.h”和“tz.h”,只使用<chrono>。
#include <chrono>
#include <iostream>
int
main()
{
using namespace std::chrono;
auto local = zoned_time{current_zone(), system_clock::now()};
std::cout << local << '\n'; // 2021-05-03 15:02:44.130182 EDT
}
在我写这篇文章的时候,部分实现刚刚开始出现在一些平台上。
你也可以直接使用ctime():
#include <stdio.h>
#include <time.h>
int main ()
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
printf ( "Current local time and date: %s", ctime (&rawtime) );
return 0;
}
你可以使用c++ 11时间类:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
time_t now = chrono::system_clock::to_time_t(chrono::system_clock::now());
cout << put_time(localtime(&now), "%F %T") << endl;
return 0;
}
把:
2017-08-25 12:30:08
std C库提供time()。 这是从纪元开始的秒数,可以使用标准C函数转换为日期和H:M:S。Boost还有一个时间/日期库供您检查。
time_t timev;
time(&timev);
你可以尝试下面的跨平台代码来获取当前的日期/时间:
#include <iostream>
#include <string>
#include <stdio.h>
#include <time.h>
// Get current date/time, format is YYYY-MM-DD.HH:mm:ss
const std::string currentDateTime() {
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
// Visit http://en.cppreference.com/w/cpp/chrono/c/strftime
// for more information about date/time format
strftime(buf, sizeof(buf), "%Y-%m-%d.%X", &tstruct);
return buf;
}
int main() {
std::cout << "currentDateTime()=" << currentDateTime() << std::endl;
getchar(); // wait for keyboard input
}
输出:
currentDateTime()=2012-05-06.21:47:59
有关日期/时间格式的更多信息,请访问这里
推荐文章
- 如何构建和使用谷歌TensorFlow c++ api
- 前一个月的Python日期
- 断言是邪恶的吗?
- 下面这些短语在c++中是什么意思:0 -,default-和value-initialization?
- 在STL地图中,使用map::insert比[]更好吗?
- C++ Linux的想法?
- 如何在python中验证日期字符串格式?
- 如何为Fedora安装g++ ?
- Std::cin输入空格?
- c++标准是否要求iostreams的性能很差,或者我只是在处理一个糟糕的实现?
- gcc在哪里查找C和c++头文件?
- 为什么我们需要require require ?
- 如何减去X天从一个日期对象在Java?
- 解析c++中的命令行参数?
- 我如何在c++中创建一个随机的字母数字字符串?