#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#define BEIJINGTIME 8
#define DAY (60*60*24)
#define YEARFIRST 2001
#define YEARSTART (365*(YEARFIRST-1970) + 8)
#define YEAR400 (365*4*100 + (4*(100/4 - 1) + 1))
#define YEAR100 (365*100 + (100/4 - 1))
#define YEAR004 (365*4 + 1)
#define YEAR001 365
/*
取当前时间,精确到微秒;
*/
int main(int argc, char *argv[])
{
struct timeval tv;
long sec = 0, usec = 0;
int yy = 0, mm = 0, dd = 0, hh = 0, mi = 0, ss = 0, ms = 0;
int ad = 0;
int y400 = 0, y100 = 0, y004 = 0, y001 = 0;
int m[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int i;
memset(&tv, 0, sizeof(timeval));
gettimeofday(&tv, NULL);
sec = tv.tv_sec;
usec = tv.tv_usec;
sec = sec + (60*60)*BEIJINGTIME;
ad = sec/DAY;
ad = ad - YEARSTART;
y400 = ad/YEAR400;
y100 = (ad - y400*YEAR400)/YEAR100;
y004 = (ad - y400*YEAR400 - y100*YEAR100)/YEAR004;
y001 = (ad - y400*YEAR400 - y100*YEAR100 - y004*YEAR004)/YEAR001;
yy = y400*4*100 + y100*100 + y004*4 + y001*1 + YEARFIRST;
dd = (ad - y400*YEAR400 - y100*YEAR100 - y004*YEAR004)%YEAR001;
//月 日
if(0 == yy%1000)
{
if(0 == (yy/1000)%4)
{
m[1] = 29;
}
}
else
{
if(0 == yy%4)
{
m[1] = 29;
}
}
for(i = 1; i <= 12; i++)
{
if(dd - m[i] < 0)
{
break;
}
else
{
dd = dd -m[i];
}
}
mm = i;
//小时
hh = sec/(60*60)%24;
//分
mi = sec/60 - sec/(60*60)*60;
//秒
ss = sec - sec/60*60;
ms = usec;
printf("%d-%02d-%02d %02d:%02d:%02d.%06d\n", yy, mm, dd, hh, mi, ss, ms);
return 1;
}

此博客展示了一段C语言代码,用于获取当前时间并精确到微秒。代码中定义了多个常量,通过`gettimeofday`函数获取时间,经过一系列计算,将时间转换为年、月、日、时、分、秒和毫秒的格式,并最终输出。
2万+

被折叠的 条评论
为什么被折叠?



