Files
sunny360vfe_proj/controllers/get_utc_time.c
T
2025-06-10 14:39:20 +08:00

81 lines
1.9 KiB
C

#include "get_utc_time.h"
gtime_t epoch2time(const double *ep)
{
const int doy[] = {1,32,60,91,121,152,182,213,244,274,305,335};
gtime_t time={0};
int days, sec, year=(int)ep[0], mon=(int)ep[1], day=(int)ep[2];
if (year<1970||2099<year||mon<1||12<mon)
return time;
/* leap year if year%4==0 in 1901-2099 */
days=(year-1970)*365+(year-1969)/4+doy[mon-1]+day-2+(year%4==0&&mon>=3?1:0); //2´ú±íǰһÌì
sec=(int)floor(ep[5]);
time.time=(time_t)days*86400+(int)ep[3]*3600+(int)ep[4]*60+sec;
time.sec=ep[5]-sec;
return time;
}
gtime_t gpst2time(int week, double sec)
{
gtime_t t=epoch2time(gpst0);
if (sec<-1E9||1E9<sec) sec=0.0;
t.time+=86400*7*week+(int)sec;
t.sec=sec-(int)sec;
return t;
}
gtime_t timeadd(gtime_t t,double sec)
{
double tt;
t.sec+=sec;tt=floor(t.sec);t.time+=(int)tt;t.sec-=tt;
return t;
}
gtime_t GPSTime2UTCTime(int week,double sec,double leapsec)
{
gtime_t gpst=gpst2time(week,sec);
return timeadd(gpst,-leapsec);
}
uint16_t get_utc_time(uint16_t GPSweek)
{
gtime_t GPSTime;
struct tm * gpstimeinfo;
GPSTime = GPSTime2UTCTime(GPSweek, 0, LEAPS);
gpstimeinfo = gmtime(&GPSTime.time);
double year = gpstimeinfo->tm_year + 1900;
double month = gpstimeinfo->tm_mon + 1;
return year;
}
uint16_t get_utc_year(uint16_t GPSweek)
{
gtime_t GPSTime;
struct tm * gpstimeinfo;
GPSTime = GPSTime2UTCTime(GPSweek, 0, LEAPS);
gpstimeinfo = gmtime(&GPSTime.time);
double year = gpstimeinfo->tm_year + 1900;
return year;
}
uint8_t get_utc_month(uint16_t GPSweek)
{
gtime_t GPSTime;
struct tm * gpstimeinfo;
GPSTime = GPSTime2UTCTime(GPSweek, 0, LEAPS);
gpstimeinfo = gmtime(&GPSTime.time);
double year = gpstimeinfo->tm_year + 1900;
double month = gpstimeinfo->tm_mon + 1;
return month;
}