0
我想在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
设置被忽略?
http://www.gnu.org/software/libc/manual/html_node/Setting-the-Locale.html setlocale命令是你的朋友。你不能打电话吗?另外,您的区域设置是混合。 –
吉姆,你应该将其转换为答案:)我不知道关于setlocale。顺便说一句,它现在印刷'31-05-2015'。有没有简单的方法来使用斜杠而不是破折号?或者它会太麻烦? – hugomg
我会使用“%d /%m /%Y”作为strftime的格式(或任何适合您需要的顺序)。 –