année ne pas afficher sur Linux

J’espère que quelqu’un peut aider. Je corrige un problème dans le code C de quelqu’un qui a été écrit il y a longtemps et il a depuis évolué.

Le morceau de code affiche l’horodatage d’un fichier particulier. Le code fonctionne correctement lorsqu’il est exécuté sous Windows, mais lorsqu’il est exécuté sous Linux, il affiche l’année de manière incorrecte. L’année n’est pas affichée sur Linux, elle montre 35222. Quelqu’un a-t-il une idée du problème ici?

Merci

Sortie Windows:

Source file: test.dtl, Created: Mon, 27 May, 2013 at 16:13:20 

Sortie Linux:

 Source file: test.dtl, Created: Mon, 27 May, 35222 at 16:13:20 

La fonction en code C:

 void SummaryReport ( report_t *report, char *dtlName) { LogEntry(L"SummaryReport entry\n"); int i; wchar_t *rootStrType,*localStr,timeStr[48]; wchar_t fileBuff[64]; struct tm *timeVals; timeVals = localtime (&logHdr.date); wcsftime (timeStr,47,L"%a, %#d %b, %Y at %X",timeVals); /* Print the header information */ DisplayReportFile (report); ReportEntry (report,L" Filesystem Audit Summary Report\n\n"); ReportEntry (report,L"Source file: %s, Created: %ls\n\n",dtlName,timeStr); ReportEntry (report,L"Server: %ls",srvrName); … } 

Vérifié sur un exemple minimal et ça “travaille pour moi”. Est-ce que cela montre le bon moment?

 #include  #include  int main() { wchar_t timeStr[48]; struct tm *timeVals; time_t now = time(NULL); timeVals = localtime(&now); wcsftime(timeStr, 47, L"%a, %#d %b, %Y at %X", timeVals); wprintf(timeStr); return 0; } 

Si oui, vérifiez le fichier lui-même – si vous partagez le système de fichiers, il y a peut-être un problème étrange avec l’horodatage du fichier lui-même? (ou avec la compréhension des métadonnées fs)

wcsftime() appelle lui-même localtime() , assurez-vous que les résultats de votre appel ne sont pas corrompus.

 struct tm timeVals; timeVals = *localtime (&logHdr.date); wcsftime (timeStr,47,L"%a, %#d %b, %Y at %X", &timeVals); 

localtime() enregistre ses résultats dans une structure statique tm quelque part . L’adresse (pointeur) à cet emplacement est renvoyée. Les appels suivants à localtime() ou gmtime() modifient la structure tm. Je pense que l’appel à wcsftime() le fait indirectement sous Linux.

BTW: localtime () pourrait renvoyer NULL, donc un code plus sûr vérifierait la valeur de retour de localtime ().

Vous pouvez vouloir regarder dans le localtime_s()