[英]How can I print the current date and time and a string to one line in a file in C?
[英]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.