2017-10-09 4 views
0

J'ai importé les bibliothèques ci-dessous.Linux: GetDateFormat() et GetTimeFormat() existaient en C++?

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

Je veux convertir la partie ci-dessous du code en Linux C++. Comment pourrait-il être?

J'ai converti TCHAR-std::string, qui est utilisé dans _countof comme paramètre de 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)); 
+0

Recherchez 'strftime', l'équivalent POSIX le plus proche des deux. – user4815162342

+1

Je vous recommande de consulter la [fonctionnalité de temps C++ standard] (http://en.cppreference.com/w/cpp/chrono) plutôt que de continuer à utiliser des fonctions spécifiques à la plate-forme. –

+0

* "... mais ne fonctionne pas" * n'est pas une déclaration de problème utile. Vous devez indiquer comment cela ne fonctionne pas. Vous devriez également montrer la commande de compilateur qui a produit l'erreur. – jww

Répondre

1

Vous pouvez utiliser strftime() de <ctime>, ce qui est la même chose, mais un match proche de ces fonctions MSDN vous mention.

Cependant, je vous recommandons fortement de vérifier ce que C++ fournit:

<chrono>

Cela fait partie de la bibliothèque standard C++, et par conséquent vous ne serez pas à vous soucier de mises en œuvre spécifiques de la plate-forme (Windows, Linux, ..).

+0

Ceci est probablement mieux adapté en tant que commentaire car il ne fournit pas de détails sur la conversion de 'GetDateFormat' et' GetTimeFormat'. Vous devriez probablement offrir plus d'un fichier d'en-tête à inclure. – jww

1

Voici un programme équivalent en utilisant ++ standard C, localtime_r POSIX (version thread-safe de localtime) et 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"; 
} 

Malheureusement, Windows ne supporte pas localtime_r mais a localtime_s qui est similaire. Donc, pour que le code ci-dessus fonctionne sur Windows, vous pouvez ajouter quelque chose le long des lignes

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