異なるロケールで C++ を使用してタイムスタンプを出力したいのですが、ある特定のホストで fr_FR に対して奇妙な出力が得られます。
ここにコードがあります、
#include <time.h> /* time_t, struct tm, time, localtime, strftime */
#include <stdlib.h>
#include <locale.h>
#include <clocale>
#include <iostream>
using namespace std;
int main()
{
time_t rawtime;
struct tm * timeinfo;
char buffer [32];
setlocale(LC_ALL, "");
cout << "LC_ALL: " << setlocale(LC_ALL, NULL) << endl;
cout << "LC_CTYPE: " << setlocale(LC_CTYPE, NULL) << endl;
time (&rawtime);
timeinfo = localtime (&rawtime);
strftime (buffer,sizeof(buffer),"%a %b %d %H:%M:%S %Y %Z",timeinfo);
puts (buffer);
return 0;
}
上記のプログラムを実行する前に、私は
export LANG=fr_FR.ISO8859-1
それは出力を与えます、
LC_ALL: fr_FR.ISO8859-1
LC_CTYPE: fr_FR.ISO8859-1
ven. avril 12 08:49:55 2013 UTC
%b と %B の両方で同じ出力が得られます。別のマシンをチェックインすると、期待どおりに動作します。出力、
LC_ALL: fr_FR.ISO8859-1
LC_CTYPE: fr_FR.ISO8859-1
jeu avr 11 23:26:24 2013 PDT
1台のマシンで、
$date +%b
avr
$date +%B
avril
問題のあるマシンでは、
$date +%b
avril
$date +%B
avril
この問題を解決するために私を助けてください。