繁体   English   中英

如何使用当前的语言环境设置打印日期?

[英]How can I print a date using the current locale settings?

我正在尝试在Linux上编写一个可打印当前日期的C程序。 在巴西,我希望它以dd / mm / yyyy格式打印,而在美国,它将以mm / dd / yyyy格式打印。

我以为strftime的“%x”说明符应该可以解决问题,但是它以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设置被忽略了吗?

默认情况下,strftime和所有其他依赖于语言环境的函数都使用“ C”语言环境。 为了使用用户区域设置,必须在程序初始化期间显式调用setlocale函数:

#include <locale.h>

int main() {
    setlocale(LC_ALL, "");

    // ...
}

如果将空字符串传递给setlocale则它将根据标准区域设置环境变量(LC_ALL,LC_TIME等)选择区域设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM