我想知道是否有任何函数会以秒为单位返回当前时间,仅为2位秒?我正在使用gcc 4.4.2。
答案 0 :(得分:16)
以下完整程序将向您展示如何访问秒值:
#include <stdio.h>
#include <time.h>
int main (int argc, char *argv[]) {
time_t now;
struct tm *tm;
now = time(0);
if ((tm = localtime (&now)) == NULL) {
printf ("Error extracting time stuff\n");
return 1;
}
printf ("%04d-%02d-%02d %02d:%02d:%02d\n",
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
tm->tm_hour, tm->tm_min, tm->tm_sec);
return 0;
}
输出:
2010-02-11 15:58:29
工作原理如下。
time()
以获得当前时间的最佳近似值(通常是自纪元以来的秒数,但标准并未实际规定)。localtime()
将其转换为包含各个日期和时间字段的结构等。tm_sec
在您的情况下,但我已经展示了其中一些)。请注意,如果您想要格林威治时间,也可以使用gmtime()
代替localtime()
,或者对于那些年纪太小的人来说,还可以使用UTC: - )。
答案 1 :(得分:2)
更便携的方法是将当前时间作为time_t
结构:
time_t mytime = time((time_t*)0);
为此struct tm
检索time_t
:
struct tm *mytm = localtime(&mytime);
检查tm_sec
的{{1}}成员。根据您的C库,我们无法保证mytm
的返回值基于自分钟开始以来的秒数。
答案 2 :(得分:2)
您可以使用gettimeofday
(C11),time
(Linux)或localtime_r
(POSIX)获取当前时间;取决于什么日历&amp;你感兴趣的时代。您可以将其转换为日历纪元之后经过的秒数,或当前分钟的秒数,以您所使用的为准:
#include <stdio.h>
#include <string.h>
#include <time.h>
int main() {
time_t current_secs = time(NULL);
localtime_r(¤t_secs, ¤t_time);
char secstr[128] = {};
struct tm current_time;
strftime(secstr, sizeof secstr, "%S", ¤t_time);
fprintf(stdout, "The second: %s\n", secstr);
return 0;
}
答案 3 :(得分:1)
您想使用gettimeofday:
man 2 gettimeofday
#include <stdio.h>
#include <sys/time.h>
int main (int argc, char **argv)
{
int iRet;
struct timeval tv;
iRet = gettimeofday (&tv, NULL); // timezone structure is obsolete
if (iRet == 0)
{
printf ("Seconds/USeconds since epoch: %d/%d\n",
(int)tv.tv_sec, (int)tv.tv_usec);
return 0;
}
else
{
perror ("gettimeofday");
}
return iRet;
}
这比使用time(0)更好,因为你也获得了自动化的使用时间,这是更常见的用例。