因为开发的需要用到NTP校准时钟,接触到了时间戳。本来想通过NTP服务器的IP地址来获取时间的,麻烦不说,还不好管理。因为我用到阿里云平台,里面有NTP服务器可以直接使用,减少了程序空间。。。
我们要用到
#include <stdio.h>
#include<time.h>
时间转时间戳程序:
long time_timestamp(char *beijing_time_str)
{
struct tm tm_time;
time_t beijing_timestamp;
// char str[] = "2023-04-16 18:22:09";
/* 2023-04-16 18:22:09 将时间格式数据赋值给tm_time结构体 */
sscanf(beijing_time_str, "%d-%d-%d %d:%d:%d", &tm_time.tm_year, &tm_time.tm_mon, &tm_time.tm_mday, &tm_time.tm_hour, &tm_time.tm_min, &tm_time.tm_sec);
printf("1 tm_year: %d\n", tm_time.tm_year);
printf("1 tm_mon: %d\n", tm_time.tm_mon);
printf("1 tm_mday: %d\n", tm_time.tm_mday);
printf("1 tm_hour: %d\n", tm_time.tm_hour);
printf("1 tm_min: %d\n", tm_time.tm_min);
printf("1 tm_sec: %d\n", tm_time.tm_sec);
tm_time.tm_year -=1900;
tm_time.tm_mon -=1;
printf("2 tm_year: %d\n", tm_time.tm_year);
printf("2 tm_mon: %d\n", tm_time.tm_mon);
printf("2 tm_mday: %d\n", tm_time.tm_mday);
printf("2 tm_hour: %d\n", tm_time.tm_hour);
printf("2 tm_min: %d\n", tm_time.tm_min);
printf("2 tm_sec: %d\n", tm_time.tm_sec);
beijing_timestamp = mktime(&tm_time);
beijing_timestamp -=28800; // 8 * 60 * 60
printf(" beijing timestamp: %ld\n",(long)beijing_timestamp);//1681640529
return beijing_timestamp;
}
时间戳转时间程序:
void timestamp_time(long timestamp)
{
//struct tm tm_time;
printf("1 timestamp is %ld\n",timestamp);
timestamp +=28800; // 8 * 60 * 60
printf("2 timestamp is %ld\n",timestamp);
struct tm* timeinfo = localtime(×tamp);
/* 或
struct tm* timeinfo;
timeinfo = localtime(×tamp);
*/
char buffer[80];
strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", timeinfo);
printf("1 timestamp->time: %s\n", buffer);
/*
sscanf(buffer, "%d-%d-%d %d:%d:%d", &tm_time.tm_year, &tm_time.tm_mon, &tm_time.tm_mday, &tm_time.tm_hour, &tm_time.tm_min, &tm_time.tm_sec);
printf("3 tm_year: %d\n", tm_time.tm_year);
printf("3 tm_mon: %d\n", tm_time.tm_mon);
printf("3 tm_mday: %d\n", tm_time.tm_mday);
printf("3 tm_hour: %d\n", tm_time.tm_hour);
printf("3 tm_min: %d\n", tm_time.tm_min);
printf("3 tm_sec: %d\n", tm_time.tm_sec);
*/
}
主函数
{
long beijing_timestamp;
char *str = "2023-04-16 18:22:09";
beijing_timestamp=time_timestamp(str);
printf("beijing_timestamp is %ld\n",beijing_timestamp);
timestamp_time(beijing_timestamp);
}
在keil中打开debug并打断点
在线时间戳转换工具在线时间戳转换工具