#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;
}