Exemplo n.º 1
0
struct tm * mygmtime(register const time_t time) {
        static struct tm br_time;
        register struct tm *timep = &br_time;
        register unsigned long dayclock, dayno;
        int year = EPOCH_YR;

        dayclock = (unsigned long)time % SECS_DAY;
        dayno = (unsigned long)time / SECS_DAY;

        timep->tm_sec = dayclock % 60;
        timep->tm_min = (dayclock % 3600) / 60;
        timep->tm_hour = dayclock / 3600;
        timep->tm_wday = (dayno + 4) % 7;       /* day 0 was a thursday */
        while (dayno >= YEARSIZE(year)) {
                dayno -= YEARSIZE(year);
                year++;
        }
        timep->tm_year = year - YEAR0;
        timep->tm_yday = dayno;
        timep->tm_mon = 0;
        while (dayno >= _ytab[LEAPYEAR(year)][timep->tm_mon]) {
                dayno -= _ytab[LEAPYEAR(year)][timep->tm_mon];
                timep->tm_mon++;
        }
        timep->tm_mday = dayno + 1;
        timep->tm_isdst = 0;

        return timep;
}
Exemplo n.º 2
0
char *format_time(uint64_t sec)
{
	struct tm t;
	static char buf[64];
	unsigned long dayclock, dayno;
	int year = EPOCH_YR;

	dayclock = (unsigned long)sec % SECS_DAY;
	dayno = (unsigned long)sec / SECS_DAY;

	t.tm_sec = dayclock % 60;
	t.tm_min = (dayclock % 3600) / 60;
	t.tm_hour = dayclock / 3600;
	t.tm_wday = (dayno + 4) % 7;	/* day 0 was a thursday */
	while (dayno >= YEARSIZE(year)) {
		dayno -= YEARSIZE(year);
		year++;
	}
	t.tm_year = year - YEAR0;
	t.tm_yday = dayno;
	t.tm_mon = 0;
	while (dayno >= _ytab[LEAPYEAR(year)][t.tm_mon]) {
		dayno -= _ytab[LEAPYEAR(year)][t.tm_mon];
		t.tm_mon++;
	}
	t.tm_mday = dayno + 1;
	t.tm_isdst = 0;

	sprintf(buf, "%s, %s %d, %d, %02d:%02d:%02d", _days[t.tm_wday],
		_months[t.tm_mon], t.tm_mday, t.tm_year + YEAR0, t.tm_hour,
		t.tm_min, t.tm_sec);

	return buf;
}
Exemplo n.º 3
0
struct tm *gmtime_r(const time_t *timer, struct tm *tmbuf) 
{
	time_t time	= *timer;
	unsigned long dayclock, dayno;
	int year	= 1970;
	dayclock	= (unsigned long) time % SECS_PER_DAY;
	dayno		= (unsigned long) time / SECS_PER_DAY;
	tmbuf->tm_sec	= dayclock % SECS_PER_MIN;
	tmbuf->tm_min	= (dayclock % SECS_PER_HOUR) / SECS_PER_MIN;
	tmbuf->tm_hour	= dayclock / SECS_PER_HOUR;
	tmbuf->tm_wday	= (dayno + 4) % 7; // Day 0 was a thursday
	while (dayno >= (unsigned long) YEARSIZE(year)) {
		dayno -= YEARSIZE(year);
		year++;
	}
	tmbuf->tm_year	= year - 1900;
	tmbuf->tm_yday	= dayno+1;
	tmbuf->tm_mon = 0;
	while (dayno >= (unsigned long) _ytab[LEAPYEAR(year)][tmbuf->tm_mon]) {
		dayno -= _ytab[LEAPYEAR(year)][tmbuf->tm_mon];
		tmbuf->tm_mon++;
	}
	tmbuf->tm_mday	= dayno + 1;
	return tmbuf;
}
Exemplo n.º 4
0
struct tm *gmtime_r(const time_t *timer, struct tm *tmbuf) {
  time_t time = *timer;
  INT32U dayclock, dayno;
  int year = EPOCH_YR;

  dayclock = (INT32U) time % SECS_DAY;
  dayno = (INT32U) time / SECS_DAY;

  tmbuf->tm_sec = dayclock % 60;
  tmbuf->tm_min = (dayclock % 3600) / 60;
  tmbuf->tm_hour = dayclock / 3600;
  tmbuf->tm_wday = (dayno + 4) % 7; // Day 0 was a thursday
  while (dayno >= (INT32U) YEARSIZE(year)) {
    dayno -= YEARSIZE(year);
    year++;
  }
  tmbuf->tm_year = year - YEAR0;
  tmbuf->tm_yday = dayno;
  tmbuf->tm_mon = 0;
  while (dayno >= (INT32U) _ytab[LEAPYEAR(year)][tmbuf->tm_mon]) {
    dayno -= _ytab[LEAPYEAR(year)][tmbuf->tm_mon];
    tmbuf->tm_mon++;
  }
  tmbuf->tm_mday = dayno + 1;
  tmbuf->tm_isdst = 0;
  //tmbuf->tm_gmtoff = 0;
  //tmbuf->tm_zone = "UTC";
  return tmbuf;
}
Exemplo n.º 5
0
void expand_time(struct time_exp_t *xt, uint64_t wall_clock)
{
	uint32_t time = NS_TO_SECS(wall_clock);
	unsigned long dayclock, dayno;
	int year = EPOCH_YR;

	dayclock = (unsigned long)time % SECS_DAY;
	dayno = (unsigned long)time / SECS_DAY;
	
	xt->tm_usec = NS_TO_US(wall_clock) % 1000000ULL;

	xt->tm_sec = dayclock % 60;
	xt->tm_min = (dayclock % 3600) / 60;
	xt->tm_hour = dayclock / 3600;
	xt->tm_wday = (dayno + 4) % 7;       /* day 0 was a thursday */
	while (dayno >= YEARSIZE(year)) {
		 dayno -= YEARSIZE(year);
		 year++;
	}
	xt->tm_year = year - YEAR0;
	xt->tm_yday = dayno;
	xt->tm_mon = 0;
	while (dayno >= _ytab[LEAPYEAR(year)][xt->tm_mon]) {
		 dayno -= _ytab[LEAPYEAR(year)][xt->tm_mon];
		 xt->tm_mon++;
	}
	xt->tm_mday = dayno + 1;
	
	xt->tm_isdst = 0;
	xt->tm_gmtoff = 0;
}
Exemplo n.º 6
0
      virtual void getTimeAndDate(TimeDate &t) const
      {
         time_t curTime = time(NULL);

#define YEAR0 1900
#define EPOCH_YR 1970
#define SECS_DAY (24L * 60L * 60L)
#define LEAPYEAR(year) (!((year) % 4) && (((year) % 100) || !((year) % 400)))
#define YEARSIZE(year) (LEAPYEAR(year) ? 366 : 365)
         const int _ytab[2][12] = {
            {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
            {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
         };
         int year = EPOCH_YR;
         unsigned long dayclock = (unsigned long)curTime % SECS_DAY;
         unsigned long dayno = (unsigned long)curTime / SECS_DAY;
         t.tm_sec = dayclock % 60;
         t.tm_min = (dayclock % 3600) / 60;
         t.tm_hour = dayclock / 3600;
         t.tm_wday = (dayno + 4) % 7; /* day 0 was a thursday */
         while (dayno >= YEARSIZE(year)) {
            dayno -= YEARSIZE(year);
            year++;
         }
         t.tm_year = year - YEAR0;
         t.tm_mon = 0;
         while (dayno >= _ytab[LEAPYEAR(year)][t.tm_mon]) {
            dayno -= _ytab[LEAPYEAR(year)][t.tm_mon];
            t.tm_mon++;
         }
         t.tm_mday = dayno + 1;
      }
Exemplo n.º 7
0
uint32_t SparkTime::year(uint32_t tnow) {
  uint32_t dayNum = (tnow+timeZoneDSTOffset(tnow)-SPARKTIMEBASESTART)/SPARKTIMESECPERDAY;
  uint32_t tempYear = SPARKTIMEBASEYEAR;

  while(dayNum >= YEARSIZE(tempYear)) {
    dayNum -= YEARSIZE(tempYear);
    tempYear++;
  }
  return tempYear;
}
Exemplo n.º 8
0
struct tm *GmTimeR(const time_t *timer, struct tm *tmbuf) {
    static const int _ytab[2][12] = {
        {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
        {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
    };
    static char zone[4] = "UTC";

    time_t time = *timer;
    if (time < 0)
        return 0;

    ui64 dayclock, dayno;
    int year = EPOCH_YR;

    if (time < 0) {
        ui64 shift = (ui64)(-time - 1) / ((ui64)FOURCENTURIES * SECS_DAY) + 1;
        time += shift * ((ui64)FOURCENTURIES * SECS_DAY);
        year -= shift * 400;
    }

    dayclock = (ui64) time % SECS_DAY;
    dayno = (ui64) time / SECS_DAY;

    year += 400 * (dayno / FOURCENTURIES);
    dayno = dayno % FOURCENTURIES;

    tmbuf->tm_sec = dayclock % 60;
    tmbuf->tm_min = (dayclock % 3600) / 60;
    tmbuf->tm_hour = dayclock / 3600;
    tmbuf->tm_wday = (dayno + 4) % 7; // Day 0 was a thursday
    while (dayno >= (ui64) YEARSIZE(year)) {
        dayno -= YEARSIZE(year);
        year++;
    }
    tmbuf->tm_year = year - YEAR0;
    tmbuf->tm_yday = dayno;
    tmbuf->tm_mon = 0;
    while (dayno >= (ui64) _ytab[LEAPYEAR(year)][tmbuf->tm_mon]) {
        dayno -= _ytab[LEAPYEAR(year)][tmbuf->tm_mon];
        tmbuf->tm_mon++;
    }
    tmbuf->tm_mday = dayno + 1;
    tmbuf->tm_isdst = 0;
#ifndef _win_
    tmbuf->tm_gmtoff = 0;
    tmbuf->tm_zone = zone;
    YASSERT(!strcmp(zone, "UTC"));
#endif

    return tmbuf;
}
Exemplo n.º 9
0
uint8_t SparkTime::day(uint32_t tnow) {
  uint32_t dayNum = (tnow+timeZoneDSTOffset(tnow)-SPARKTIMEBASESTART)/SPARKTIMESECPERDAY;
  uint32_t tempYear = SPARKTIMEBASEYEAR;
  uint8_t  tempMonth = 0;

  while(dayNum >= YEARSIZE(tempYear)) {
    dayNum -= YEARSIZE(tempYear);
    tempYear++;
  }
  
  while(dayNum >= _monthLength[LEAPYEAR(tempYear)][tempMonth]) {
    dayNum -= _monthLength[LEAPYEAR(tempYear)][tempMonth];
    tempMonth++;
  }
  dayNum++;			// correct for zero-base
  return (uint8_t)dayNum;
}
Exemplo n.º 10
0
uint8_t SparkTime::month(uint32_t tnow) {
  uint32_t dayNum = (tnow+timeZoneDSTOffset(tnow)-SPARKTIMEBASESTART)/SPARKTIMESECPERDAY;
  uint32_t tempYear = SPARKTIMEBASEYEAR;
  uint8_t  tempMonth = 0;

  while(dayNum >= YEARSIZE(tempYear)) {
    dayNum -= YEARSIZE(tempYear);
    tempYear++;
  }
  
  while(dayNum >= _monthLength[LEAPYEAR(tempYear)][tempMonth]) {
    dayNum -= _monthLength[LEAPYEAR(tempYear)][tempMonth];
    tempMonth++;
  }
  tempMonth++;
  return tempMonth;
}
Exemplo n.º 11
0
// The gmtime() function converts the calendar time timep to broken-down
// time representation, expressed in Coordinated Universal Time (UTC).
const struct tm* gmtime(time_t time){
	static struct tm tm;
	uint32_t dayclock = time % SECS_DAY;

	tm.tm_mday = time / SECS_DAY;
	tm.tm_year = EPOCH_YR;
	tm.tm_sec = time % 60UL;
	tm.tm_min = (time % 3600UL) / 60;
	tm.tm_hour = dayclock / 3600UL;
	tm.tm_wday = (tm.tm_mday + 4) % 7;  /* day 0 was a thursday */

	while (tm.tm_mday >= YEARSIZE(tm.tm_year)) {
		tm.tm_mday -= YEARSIZE(tm.tm_year);
		tm.tm_year++;
	}
	tm.tm_mon = 0;
	while (tm.tm_mday >= monthlen(LEAPYEAR(tm.tm_year),tm.tm_mon)) {
		tm.tm_mday -= monthlen(LEAPYEAR(tm.tm_year),tm.tm_mon);
		tm.tm_mon++;
	}
	tm.tm_mday++;
	return &tm;
}
Exemplo n.º 12
0
// gmtime -- convert calendar time (sec since 1970) into broken down time
// returns something like Fri 2007-10-19 in day and 01:02:21 in clock
// The return values is the minutes as integer. This way you can update
// the entire display when the minutes have changed and otherwise just
// write current time (clock). That way an LCD display needs complete
// re-write only every minute.
uint8_t gmtime(const uint32_t time,char *day, char *clock)
{
    char dstr[4];
    uint8_t i;
	uint32_t dayclock;
    uint16_t dayno;
	uint16_t tm_year = EPOCH_YR;
	uint8_t tm_sec,tm_min,tm_hour,tm_wday,tm_mon;
	dayclock = (time) % SECS_DAY;
	dayno = (time) / SECS_DAY;
	extern newMinute;
	
	tm_sec = dayclock % 60UL;
	newMinute=tm_sec;
	
	tm_min = (dayclock % 3600UL) / 60;
	tm_hour = dayclock / 3600UL;
	tm_wday = (dayno + 4) % 7;	/* day 0 was a Thursday */
	while (dayno >= YEARSIZE(tm_year)) {
		dayno -= YEARSIZE(tm_year);
		tm_year++;
	}
	tm_mon = 0;
	while (dayno >= monthlen(LEAPYEAR(tm_year),tm_mon)) {
		dayno -= monthlen(LEAPYEAR(tm_year),tm_mon);
		tm_mon++;
	}
        i=0;
        while (i<3){
                dstr[i]= pgm_read_byte(&(day_abbrev[tm_wday*3 + i])); 
                i++;
        }
        dstr[3]='\0';
	sprintf_P(day,PSTR("%s %u-%02u-%02u"),dstr,tm_year,tm_mon+1,dayno + 1);
	sprintf_P(clock,PSTR("%02u:%02u:%02u"),tm_hour,tm_min,tm_sec);
        return(tm_min);
}
Exemplo n.º 13
0
bool SparkTime::isEuroDST(uint32_t tnow) {
  // 1am last Sunday in March to 1am on last Sunday October
  // can't use offset here 
  bool result = false;
  uint32_t dayNum = (tnow+_timezone*3600UL-SPARKTIMEBASESTART)/SPARKTIMESECPERDAY;
  uint32_t tempYear = SPARKTIMEBASEYEAR;
  uint8_t  tempMonth = 0;
  uint8_t tempHour = ((tnow+_timezone*3600UL) % 86400UL)/3600UL;

  while(dayNum >= YEARSIZE(tempYear)) {
    dayNum -= YEARSIZE(tempYear);
    tempYear++;
  }
  
  while(dayNum >= _monthLength[LEAPYEAR(tempYear)][tempMonth]) {
    dayNum -= _monthLength[LEAPYEAR(tempYear)][tempMonth];
    tempMonth++;
  }
  tempMonth++;
  dayNum++;			// correct for zero-base
  
  if (tempMonth>3 && tempMonth<10) {
    result = true;
  } else if (tempMonth == 3) {
    if ((dayNum == _EuDSTStart[tempYear-SPARKTIMEBASEYEAR] && tempHour >=1) ||
	(dayNum >  _EuDSTStart[tempYear-SPARKTIMEBASEYEAR])) {
      result = true;
    }      
  } else if (tempMonth == 10) {
    if (!((dayNum == _EuDSTEnd[tempYear-SPARKTIMEBASEYEAR] && tempHour >=1) ||
	  (dayNum >  _EuDSTEnd[tempYear-SPARKTIMEBASEYEAR]))) {
      result = true;
    }      
  }
  return result;
}