时间和时间戳之间转换

因为开发的需要用到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(&timestamp);

    /*    或
    struct tm* timeinfo;
    timeinfo = localtime(&timestamp);
    */
    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并打断点

在线时间戳转换工具在线时间戳转换工具


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值