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

时间:2017-10-09 07:17:21

标签: c++ linux time

我在下面导入了这些库。

#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

2 个答案:

答案 0 :(得分:1)

您可以使用<ctime>中的strftime(),它与您提及的这些MSDN功能不相同,但与您提到的MSDN功能非常接近。

但是,我强烈建议您查看C ++提供的内容:

<chrono>

这是标准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