Skip to content

Instantly share code, notes, and snippets.

@dzonesasaki
Created December 8, 2022 07:16
Show Gist options
  • Save dzonesasaki/b6b15c39824fb81fc5f15c05cfc38ad8 to your computer and use it in GitHub Desktop.
Save dzonesasaki/b6b15c39824fb81fc5f15c05cfc38ad8 to your computer and use it in GitHub Desktop.
calc unix epoch time froom date using C
//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, &gtmCurrentTime);
printTime();
printf("tm2Epoch %d\n",tm2Epoch(&gtmCurrentTime));
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