我在下面导入了这些库。
#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) );
的参数
command
答案 0 :(得分:1)
您可以使用<ctime>
中的strftime()
,它与您提及的这些MSDN功能不相同,但与您提到的MSDN功能非常接近。
但是,我强烈建议您查看C ++提供的内容:
这是标准C ++库的一部分,因此您不必担心平台特定的实现(Windows,Linux,..)。
答案 1 :(得分:1)
这是使用标准C ++,POSIX localtime_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