Я пытаюсь написать программу на Linux, которая печатает текущую дату. Здесь, в Бразилии, я хочу, чтобы он печатался в формате dd/mm/yyyy, а в США он печатался в формате mm/dd/yyyy.Как распечатать дату, используя текущие настройки локали?
Я думал, что спецификатор «% x» для strftime должен был сделать трюк, но его печать в формате mm/dd/yyyy.
#include <stdio.h>
#include <time.h>
int main(){
struct tm local_now;
{
time_t now;
time(&now);
struct tm *tmp = localtime(&now);
local_now = *tmp;
}
char buf[20];
strftime(buf, sizeof buf, "%x", &local_now);
printf("%s\n", buf);
return 0;
}
А вот выход я получаю от запуска команды locale
:
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=pt_BR.UTF-8
LC_TIME=pt_BR.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=pt_BR.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=pt_BR.UTF-8
LC_NAME=pt_BR.UTF-8
LC_ADDRESS=pt_BR.UTF-8
LC_TELEPHONE=pt_BR.UTF-8
LC_MEASUREMENT=pt_BR.UTF-8
LC_IDENTIFICATION=pt_BR.UTF-8
LC_ALL=
Видимо установка LC_TIME=pt_BR.UTF-8
игнорируется?
http://www.gnu.org/software/libc/manual/html_node/Setting-the-Locale.html команда setlocale - ваш друг. Вы не можете это назвать? Кроме того, ваш язык - это смесь. –
jim, вы должны преобразовать это в ответ :) Я не знал о setlocale. BTW, теперь он печатает '31-05-2015'. Есть ли простой способ использовать косые черты вместо тире или это будет слишком много проблем? – hugomg
Я бы использовал «% d /% m /% Y» в качестве формата для strftime (или любого другого порядка, который соответствует вашим потребностям). –