【问题标题】:Producing locale-specific short dates生成特定于语言环境的短日期
【发布时间】:2014-01-18 15:17:42
【问题描述】:

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

在我看来,strftime 没有为用户提供任何请求特定区域设置的“短日期”,其中仅使用数字和分隔符。因此,看起来我需要在自己的程序中保留一个本地数据库和短日期格式,例如将 is_IS 映射到“%d.%m.%Y”。是否有任何其他选择需要考虑? libicu/ICU4C?

【问题讨论】:

    标签: c localization


    【解决方案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 格式中实际得到的东西有什么保证。我希望%x 的输出更像是“C”语言环境的%m/%d/%y 输出。 “de_DE”语言环境似乎提供了类似的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多