linux C 将时间转化的示例

#include <sys/time.h>

#include <time.h>

1、将系统时间(秒数)转为“YY-MM-DD HH:MM:SS”格式

/**

 * @brief 将系统时间转化为 年-月-日 时:分:秒

 * @param 系统时间(秒)

 * @param 转化后的系统时间 <出参>

 * @param 缓存长度 <出参>

 * @return 0 成功,-1失败

 */

int get_system_time(time_t now_time,char *buffer,int buffer_len)

{

    struct tm *pTmTime;

    char   szTime[64] = {0};

  

    //time_t 结构转换成tm结构

    pTmTime = localtime(&now_time);

    //验证tm类型数据是否正确

    snprintf(szTime, sizeof(szTime)-1,

     "%d-%02d-%02d %02d:%02d:%02d",

        pTmTime->tm_year+1900,

        pTmTime->tm_mon+1,

        pTmTime->tm_mday,

        pTmTime->tm_hour,

        pTmTime->tm_min,

        pTmTime->tm_sec);

    snprintf(buffer,buffer_len,"%s",szTime);

    return 0;

}

2、将“YY-MM-DD HH:MM:SS”格式时间,转为1970-01-01到现在的秒数

//将时间字符串 2024-1-1 10:20:15转成1970年到现在的秒数

int trans_date_string_to_now_second(char *data_string)

{

    struct tm timeinfo = {0};

    int year,month,day,hour,min,second;

    time_t timestamp=0;

    ASSERT_PRINT(!data_string,return -1,"paramer invaild\n");

    log_i("date string : %s\n",data_string);

    sscanf(data_string,"%d-%d-%d %d:%d:%d",&year,&month,&day,&hour,&min,&second);

    ASSERT_PRINT(year  > 2030 || year < 1970,return -1,"year error\n");

    ASSERT_PRINT(month >12 || month < 1,return -1,"month error\n");

    ASSERT_PRINT(day > 31 || day < 1,return -1,"day error\n");

    ASSERT_PRINT(hour > 23 || hour < 1,return -1,"hour error\n");

    ASSERT_PRINT(min > 59 || min < 1,return -1,"min error\n");

    ASSERT_PRINT(second > 59 || second < 1,return -1,"second error\n");

    log_i("trans data : %d-%d-%d %d:%d:%d\n",year,month,day,hour,min,second);

   

    // 设置时间信息

    timeinfo.tm_year = year - 1900;  // 年份需要减去 1900

    timeinfo.tm_mon = month - 1;         // 月份从 0 开始,所以 9 表示十月

    timeinfo.tm_mday = day;           // 日期

    timeinfo.tm_hour = hour;           // 小时

    timeinfo.tm_min = min;            // 分钟

    timeinfo.tm_sec = second;             // 秒

    // 调用 mktime 转换为时间戳

    timestamp = mktime(&timeinfo);

    return timestamp;

}

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值