Created
December 8, 2022 07:16
-
-
Save dzonesasaki/b6b15c39824fb81fc5f15c05cfc38ad8 to your computer and use it in GitHub Desktop.
calc unix epoch time froom date using C
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//gcc calc_epochtime.c | |
#include <stdio.h> | |
#include <stdint.h> | |
#include <time.h> | |
struct tm gtmCurrentTime; | |
void intoDatetime(uint16_t uiYearAc, uint8_t uiMonthOrg, uint8_t uiDate, uint8_t uiHour, uint8_t uiMinute, uint8_t uiSecond ,struct tm *ptm){ | |
//usage : intoDatetime( 2022,12,6,17,30,5); | |
ptm->tm_year = uiYearAc - 1900; | |
ptm->tm_mon = uiMonthOrg -1; | |
ptm->tm_mday = uiDate; | |
ptm->tm_hour = uiHour; | |
ptm->tm_min = uiMinute; | |
ptm->tm_sec = uiSecond; | |
}//intoDatetime | |
uint32_t calcSumDateMonth(uint8_t uiMonth0){ | |
uint16_t uiTblMonthSumDate[] = {0,31,59,90,120,151,181,212,243,273,304,334,365}; | |
return(uiTblMonthSumDate[uiMonth0]); | |
}//calcSumDateMonth | |
uint32_t calcTotalDayFrom1970Jan01(uint8_t uiYear1900, uint8_t uiMonth0, uint8_t uiDate){ | |
uint8_t uiYear = uiYear1900 -70; //from 1970 | |
uint32_t uiSumDay = uiDate - 1; | |
uiSumDay += calcSumDateMonth(uiMonth0); | |
uiSumDay += (uiYear>>2) * (365*4+1); // 4year cycle | |
uiSumDay += (uiYear&3) * (365); // remain year in cycle | |
uiSumDay += 1 * (uiYear <= 30); // for 1972 to 2000 | |
uiSumDay += ( ((uiYear+2)&3)==0 )*(uiMonth0 > 2); //leap year from 1972 | |
return(uiSumDay); | |
}//calcTotalDayFrom1970Jan01 | |
uint32_t calcTotalSecToday(uint8_t uiHour, uint8_t uiMinute, uint8_t uiSecond){ | |
uint32_t uiTmSec = uiSecond; | |
uiTmSec += uiMinute * 60; | |
uiTmSec += uiHour * 3600; | |
return(uiTmSec); | |
}//calcTotalSecToday | |
uint32_t calcUnixEpochSecondFrom1970Jan01Tm(uint8_t uiYear1900, uint8_t uiMonth0, uint8_t uiDate, uint8_t uiHour, uint8_t uiMinute, uint8_t uiSecond) | |
{ //usage: res = calcUnixEpochSecondFrom1970Jan01Tm( 2022-1900, 12-1, 6, 17,30,5); | |
uint32_t uiSumSec=0; | |
uiSumSec += (uint32_t)(3600*24)* calcTotalDayFrom1970Jan01( uiYear1900, uiMonth0, uiDate); | |
uiSumSec += calcTotalSecToday(uiHour, uiMinute, uiSecond); | |
return(uiSumSec); | |
}//calcUnixEpochSecondFrom1970Jan01Tm | |
uint32_t tm2Epoch(struct tm *ptm){ | |
uint8_t uiYear1900 = ptm->tm_year; | |
uint8_t uiMonth0 = ptm->tm_mon; | |
uint8_t uiDate = ptm->tm_mday; | |
uint8_t uiHour = ptm->tm_hour; | |
uint8_t uiMinute = ptm->tm_min; | |
uint8_t uiSecond = ptm->tm_sec; | |
return( calcUnixEpochSecondFrom1970Jan01Tm( uiYear1900, uiMonth0, uiDate, uiHour, uiMinute, uiSecond)); | |
}//tm2Epoch | |
void printTime(){ | |
printf(" "); | |
printf("%d",gtmCurrentTime.tm_year+1900); | |
printf(" / "); | |
printf("%d",gtmCurrentTime.tm_mon+1); | |
printf("/"); | |
printf("%d",gtmCurrentTime.tm_mday); | |
printf(" _ "); | |
printf("%d",gtmCurrentTime.tm_hour); | |
printf(":"); | |
printf("%d",gtmCurrentTime.tm_min); | |
printf(":"); | |
printf("%d",gtmCurrentTime.tm_sec); | |
printf("\n"); | |
}//printTime | |
int main(){ | |
intoDatetime(2022,12,6,16,30,5, >mCurrentTime); | |
printTime(); | |
printf("tm2Epoch %d\n",tm2Epoch(>mCurrentTime)); | |
printf("calc %d\n", calcUnixEpochSecondFrom1970Jan01Tm(2022-1900,12-1,6,16,30,5)); | |
return 0; | |
} | |
/* | |
result = (total Day from epoch) * 3600*24 + (todaysec ) | |
tm2Epoch(&dt) | |
L calcUnixEpochSecondFrom1970Jan01Tm( y,M,d,h,m,s) | |
|- calcTotalDayFrom1970Jan01(y,M,d) | |
L calcTotalSecToday(h,m,s) | |
L calcSumDateMonth(m) | |
intoDatetime(2022,12,6,17,30,5, &dt) | |
dt -> | |
tm_year = 122 = 2022 -1900 | |
tm_mon = 11 = 12 - 1 | |
tm_mday = 6 | |
tm_hour = 17 | |
tm_min = 30 | |
tm_sec = 5 | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment