我正在尝试在 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 等)选择区域设置。
关于c - 如何使用当前区域设置打印日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30564743/