年月日转UTC时间戳

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 *)&timestamp, &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);


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值