最近呢,项目需要获取时间戳,作为数据包中的内容。因此才有了此篇。
我们通常所用的时间戳呢,是Unix时间戳。Unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
有个实用的时间戳获取工具:
本篇教程呢,就是在window和liunx下要用C语言实现时间戳的获取,以最简单的方法。
Windows
#include <stdio.h>
#include <time.h>
int main()
{
time_t tt;
struct tm *st;
time(&tt);
printf("%ld\n", tt);
return 0;
}
本段代码实现了秒级时间戳,但是笔者发现,Windows下要获取毫秒并不简单。
对于毫秒时间戳,实际上也就是秒级时间戳后面加三位数(毫秒数)。因此,只要获取到当前时间的毫秒数就行了。
于是乎就是想办法获取毫秒数了。
#include <stdio.h>
#include <time.h>
#include <Windows.h>
int main()
{
SYSTEMTIME t1;
GetSystemTime(&t1);
printf("%ld\n", (int)t1.wMilliseconds);
return 0;
}
本段代码实现了对毫秒数的获取。
因此将以上代码进行一个整合,即可获取到毫秒级时间戳:
#include <stdio.h>
#include <time.h>
#include <Windows.h>
int main()
{
time_t tt;
struct tm *st;
time(&tt);
printf("%ld", tt);
SYSTEMTIME t1;
GetSystemTime(&t1);
printf("%ld\n", (int)t1.wMilliseconds);
return 0;
}
LIUNX
#include <sys/time.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
struct timeval tv;
gettimeofday(&tv, NULL);
printf("second: %ld\n", tv.tv_sec); // 秒
printf("millisecond: %ld\n", tv.tv_sec * 1000 + tv.tv_usec / 1000); // 毫秒
return 0;
}
简评
怎么看liunx都要简单很多,可能这是windows的某点缺陷吧。
既然要传输数据,那么接下来只需要将这些整形数据转变为字符串数据就行了,这部分就留给同学们自行发挥咯。