Linux:GetDateFormat()和GetTimeFormat()是否存在C++

Linux: GetDateFormat() and GetTimeFormat() existed C++?

本文关键字:是否 存在 C++ GetTimeFormat Linux GetDateFormat      更新时间:2023-10-16

我导入了下面的库。

#include <stdlib.h>
#include <time.h>
#include <stdio.h>

我想将下面的代码部分转换为Linux C++。怎么可能呢?

我已经将TCHAR转换为std::string,它在_countof中用作GetDateFormat的参数

TCHAR szDate[16];
TCHAR szTime[16];
GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, 
_T("yyyy-MM-dd"), 
szDate, _countof(szDate)); 
GetTimeFormat ( LOCALE_USER_DEFAULT, 0, NULL, 
_T("hh:mm:ss tt"),
szTime, _countof(szTime) );

您可以从<ctime>中使用strftime(),这是不一样的,但与您提到的MSDN函数非常匹配。

然而,我强烈建议您检查C++提供的内容:

<chrono>

这是标准C++库的一部分,因此您不必担心特定于平台的实现(Windows、Linux等)

下面是一个使用标准C++、POSIXlocaltime_r(localtime的线程安全版本)和strftime:的等效程序

#include <iostream>
#include <ctime>
int main() {
struct tm t;
time_t tstamp = time(nullptr);
if (!localtime_r(&tstamp, &t)) {
perror("localtime");
return 1;
}
char strdate[16];
if (strftime(strdate, sizeof(strdate), "%Y-%m-%d", &t) == 0) {
perror("strftime");
return 1;
}
std::cout << strdate << "n";
char strtime[16];
if (strftime(strtime, sizeof(strtime), "%H:%M:%S %p", &t) == 0) {
perror("strftime");
return 1;
}
std::cout << strtime << "n";
}

不幸的是,Windows不支持localtime_r,但有类似的localtime_s。因此,要使上述代码也能在Windows上运行,您可以添加一些类似的内容

#ifdef _WIN32
#  define localtime_r(timet,tm) (!localtime_s(tm,timet))
#endif