LINUX.ORG.RU

strftime и локаль


0

0

Маленькая программка:

#include <time.h>

void main()
{
time_t t;
struct tm *local;
char ftime[256];

t = time(NULL);
local = localtime(&t);
strftime(ftime, 127, "%d %b %Y %H:%M", local);
printf("\n%s\n", ftime);
}

Возвращает:
21 May 2006 18:43

Почему то не русской локали, хотя date из bash выдает:
Вск Май 21 18:43:40 MSD 2006

locale из bash выдает:
LANG=ru_RU.KOI8-R
LC_CTYPE="ru_RU.KOI8-R"
LC_NUMERIC="ru_RU.KOI8-R"
LC_TIME="ru_RU.KOI8-R"
LC_COLLATE="ru_RU.KOI8-R"
LC_MONETARY="ru_RU.KOI8-R"
LC_MESSAGES="ru_RU.KOI8-R"
LC_PAPER="ru_RU.KOI8-R"
LC_NAME="ru_RU.KOI8-R"
LC_ADDRESS="ru_RU.KOI8-R"
LC_TELEPHONE="ru_RU.KOI8-R"
LC_MEASUREMENT="ru_RU.KOI8-R"
LC_IDENTIFICATION="ru_RU.KOI8-R"
LC_ALL=ru_RU.KOI8-R

И вот еще:
$ ls -d1 /usr/lib/locale/ru*
/usr/lib/locale/ru
/usr/lib/locale/ru_RU
/usr/lib/locale/ru_RU.koi8r
/usr/lib/locale/ru_RU.koi8-r
/usr/lib/locale/ru_RU.KOI8R
/usr/lib/locale/ru_RU.KOI8-R

$ ls -d1 /usr/share/locale/ru*
/usr/share/locale/ru
/usr/share/locale/ru_RU
/usr/share/locale/ru_RU.koi8r
/usr/share/locale/ru_RU.koi8-r
/usr/share/locale/ru_RU.KOI8R
/usr/share/locale/ru_RU.KOI8-R

На UTF8 перейти не смогу, да и не поможет:
$ export LC_ALL=ru_RU.UTF8
$ export LANG=ru_RU.UTF8
$ /x
21 May 2006 18:43

:-(

★★★★★

Вот так работает, но почему нужно делать setlocale в "" (подсмотрел в коде wget-a)?

#include <time.h>
#include <locale.h>

void main()
{
time_t t;
struct tm *local;
char ftime[256];

setlocale (LC_TIME, "");

t = time(NULL);
local = localtime(&t);

strftime(ftime, 127, "%d %B %Y %H:%M", local);

printf("\n%s\n", ftime);
}

saper ★★★★★
() автор топика
Ответ на: комментарий от saper

вообще программу с локалью нужно начинать
setlocale(LC_ALL,"");
иначе не будет никакой локали.
советую прочитать
locale as it is
там подробно все рассказано

Chumka ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.