uint32_t convertToUtcTimestamp(const char *dateNum)
{
// 提取年月日时分秒
int year = (int)(dateNum[0] - '0') * 10 + (int)(dateNum[1] - '0') + 2000;
int month = (int)(dateNum[2] - '0') * 10 + (int)(dateNum[3] - '0')-1 ; // 月份是从0开始的
int day = (int)(dateNum[4] - '0') * 10 + (int)(dateNum[5] - '0');
int hour = (int)(dateNum[6] - '0') * 10 + (int)(dateNum[7] - '0');
int minute = (int)(dateNum[8] - '0') * 10 + (int)(dateNum[9] - '0');
int second = (int)(dateNum[10] - '0') * 10 + (int)(dateNum[11] - '0');
// 计算从1970年1月1日到给定年份的总天数
int daysSince1970 = 0;
for (int y = 1970; y < year; y++)
{
daysSince1970 += isLeapYear(y) ? 366 : 365;
}
// 计算给定年份内的天数
for (int m = 0; m < month; m++)
{
daysSince1970 += daysInMonth(year, m);
}
daysSince1970 += day-1 ; // 减1是因为1月1日算作第0天
// 将小时、分钟和秒转换为秒
int secondsSinceMidnight = 0;
secondsSinceMidnight = hour * 3600 + minute * 60 + second;
// 计算总秒数
return (daysSince1970 * 86400 + secondsSinceMidnight);
}
传入数据为240827181356 即24年8月27日18点13分56秒
要先进行判断
// 判断是否为闰年
int isLeapYear(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
return 1;
}
return 0;
}
// 获取给定月份的天数
int daysInMonth(int year, int month)
{
switch (month) {
case 0: case 2: case 4: case 6: case 7: case 9: case 11:
return 31;
case 3: case 5: case 8: case 10:
return 30;
case 1: // 二月
return isLeapYear(year) ? 29 : 28;
default:
return 0; // 错误的月份
}
}
------------------------------------------时间戳转年月日(北京时间为UTC+8h----------------------------------
#include "time.h"
void printUTCTime(uint32_t timestamp)
{
struct tm timeinfo;
char timeStr[20];
localtime_r((const time_t *)×tamp, &timeinfo);
timeinfo.tm_hour += 8;
timeinfo.tm_isdst = -1;
time_t utcTime = mktime(&timeinfo);
gmtime_r(&utcTime, &timeinfo);
strftime(timeStr, sizeof(timeStr), "%Y-%m-%d %H:%M:%S", &timeinfo);
printf("UTC Time: %s\n", timeStr);
}