我遇到了问题。 我需要得到像一年中的一天,一个月中的一天,一年中的一些月份等等。 我使用这段代码:
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t liczba_sekund;
struct tm strukt;
time(&liczba_sekund);
localtime_r(&liczba_sekund, &strukt);
printf("today is %d day of year\nmonth is %d, month's day %d\n", strukt.tm_yday+1, strukt.tm_mon+1, strukt.tm_mday);
return 0;
}
第一件事:为什么gcc -std = c99 -pedantic -Wall会返回此警告:
我的输入:gcc test_data.c -o test_data.out -std = c99 -pedantic -Wall
输出:
test_data.c:在函数'main'中:
test_data.c:11:3:警告:隐式声明函数'localtime_r'[-Wimplicit-function-declaration]
第二件事:如何让它在Windows上运行?在尝试使用Dev-C编译它时,我得到了这个: http://imgur.com/U7dyE
@@ EDIT -------------------- 我找到了当地时间建议的一个例子:
#include <stdio.h>
#include <time.h>
int main ()
{
time_t time_raw_format;
struct tm * ptr_time;
time ( &time_raw_format );
ptr_time = localtime ( &time_raw_format );
printf ("Current local time and date: %s", asctime(ptr_time));
return 0;
}
如何将此更改为日期格式:5.12.2012或5-12-2012?如何获得今年的一天?
如果解决方案在Windows和Linux上都有效,我很乐意。
答案 0 :(得分:8)
localtime_r
不是C标准的一部分。也许你在寻找localtime
?
localtime_r
在许多Linux系统上都可用:
线程安全版本asctime_r(),ctime_r(),gmtime_r()和localtime_r()由SUSv2指定,并且自libc 5.2.5起可用
但是,由于它不是标准的一部分,因此无法在Windows上使用它。
如何将此更改为日期格式:5.12.2012或5-12-2012?如何获得今年的一天?
您必须使用strftime
代替asctime
:
int main ()
{
time_t time_raw_format;
struct tm * ptr_time;
char buffer[50];
time ( &time_raw_format );
ptr_time = localtime ( &time_raw_format );
if(strftime(buffer,50,"%d.%m.%Y",ptr_time) == 0){
perror("Couldn't prepare formatted string");
} else {
printf ("Current local time and date: %s", buffer);
}
return 0;
}
答案 1 :(得分:0)
localtime应该是线程安全的:http://msdn.microsoft.com/en-us/library/bf12f0hc%28VS.80%29.aspx
32位和64位版本的gmtime,mktime,mkgmtime和 localtimeall为每个线程使用单个tm结构进行转换。 每次调用其中一个例程都会破坏前一个例程的结果 调用