生成特定于语言环境的短日期

时间:2013-12-31 18:07:23

标签: c localization

当在glibc下使用strftime C函数并与例如is_IS语言环境结合使用时,strftime %x格式说明符会生成类似“þri31。2013”​​的字符串,换句话说,它无偿地包括工作日并将月份写为单词/缩写词。还有其他区域设置表现出这种行为。

我看到它的方式,strftime没有为用户提供任何东西来请求特定于语言环境的“短日期”,其中只使用数字和分隔符。因此,看起来我需要在我自己的程序中保留语言环境和短日期格式的本地数据库,例如将is_IS映射到“%d.%m.%Y”。还有其他选择需要考虑吗? libicu / ICU4C?

1 个答案:

答案 0 :(得分:1)

我用以下内容复制了你的结果:

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

int
main(void)
{
   char time_buf[128];
   time_t t;
   struct tm *tmp;

   t = time(NULL);
   tmp = localtime(&t);
   setlocale(LC_TIME, "is_IS");
   strftime(time_buf, sizeof(time_buf), "%x", tmp);
   printf("time: `%s'\n", time_buf);

   return 0;
}

对我来说,这可能是一个错误(或者至少是改变其当前行为的请求),应该向glibc维护者报告。我不知道是什么保证你实际上从特定于语言环境的strftime格式中获得了什么。我期望更像{C}区域设置%m/%d/%y的{​​{1}}输出。 “de_DE”语言环境似乎提供了这样的东西。