Brandon Fictorie / Mbed 2 deprecated BF_Websocket

Dependencies:   mbed

Committer:
bfictorie
Date:
Sun Mar 25 17:26:30 2012 +0000
Revision:
0:8cdad1c73e8e

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bfictorie 0:8cdad1c73e8e 1 #include "Time.h"
bfictorie 0:8cdad1c73e8e 2
bfictorie 0:8cdad1c73e8e 3 #include "stdio.h"
bfictorie 0:8cdad1c73e8e 4 // #include "time.h"
bfictorie 0:8cdad1c73e8e 5
bfictorie 0:8cdad1c73e8e 6 using namespace std;
bfictorie 0:8cdad1c73e8e 7
bfictorie 0:8cdad1c73e8e 8 class TimeZoneEntry {
bfictorie 0:8cdad1c73e8e 9 public:
bfictorie 0:8cdad1c73e8e 10 TimeStamp *_from;
bfictorie 0:8cdad1c73e8e 11 TimeStamp *_to;
bfictorie 0:8cdad1c73e8e 12 int _offset;
bfictorie 0:8cdad1c73e8e 13 };
bfictorie 0:8cdad1c73e8e 14
bfictorie 0:8cdad1c73e8e 15 list<TimeZoneEntry*> *Time::_timeZoneEntries=NULL;
bfictorie 0:8cdad1c73e8e 16
bfictorie 0:8cdad1c73e8e 17 bool TimeStamp::isSame(TimeStamp* ts)
bfictorie 0:8cdad1c73e8e 18 {
bfictorie 0:8cdad1c73e8e 19 if (ts->getYear()!=getYear())
bfictorie 0:8cdad1c73e8e 20 return false;
bfictorie 0:8cdad1c73e8e 21 if (ts->getMonth()!=getMonth())
bfictorie 0:8cdad1c73e8e 22 return false;
bfictorie 0:8cdad1c73e8e 23 if (ts->getDay()!=getDay())
bfictorie 0:8cdad1c73e8e 24 return false;
bfictorie 0:8cdad1c73e8e 25 if (ts->getHour()!=getHour())
bfictorie 0:8cdad1c73e8e 26 return false;
bfictorie 0:8cdad1c73e8e 27 if (ts->getSecond()!=getSecond())
bfictorie 0:8cdad1c73e8e 28 return false;
bfictorie 0:8cdad1c73e8e 29 return true;
bfictorie 0:8cdad1c73e8e 30 }
bfictorie 0:8cdad1c73e8e 31 bool TimeStamp::isBefore(TimeStamp* ts)
bfictorie 0:8cdad1c73e8e 32 {
bfictorie 0:8cdad1c73e8e 33 if (getYear()<ts->getYear())
bfictorie 0:8cdad1c73e8e 34 return true;
bfictorie 0:8cdad1c73e8e 35 if (getYear()>ts->getYear())
bfictorie 0:8cdad1c73e8e 36 return false;
bfictorie 0:8cdad1c73e8e 37
bfictorie 0:8cdad1c73e8e 38 if (getMonth()<ts->getMonth())
bfictorie 0:8cdad1c73e8e 39 return true;
bfictorie 0:8cdad1c73e8e 40 if (getMonth()>ts->getMonth())
bfictorie 0:8cdad1c73e8e 41 return false;
bfictorie 0:8cdad1c73e8e 42
bfictorie 0:8cdad1c73e8e 43 if (getDay()<ts->getDay())
bfictorie 0:8cdad1c73e8e 44 return true;
bfictorie 0:8cdad1c73e8e 45 if (getDay()>ts->getDay())
bfictorie 0:8cdad1c73e8e 46 return false;
bfictorie 0:8cdad1c73e8e 47
bfictorie 0:8cdad1c73e8e 48 if (getHour()<ts->getHour())
bfictorie 0:8cdad1c73e8e 49 return true;
bfictorie 0:8cdad1c73e8e 50 if (getHour()>ts->getHour())
bfictorie 0:8cdad1c73e8e 51 return false;
bfictorie 0:8cdad1c73e8e 52
bfictorie 0:8cdad1c73e8e 53 if (getSecond()<ts->getSecond())
bfictorie 0:8cdad1c73e8e 54 return true;
bfictorie 0:8cdad1c73e8e 55 return false;
bfictorie 0:8cdad1c73e8e 56 }
bfictorie 0:8cdad1c73e8e 57 bool TimeStamp::isAfter(TimeStamp* ts)
bfictorie 0:8cdad1c73e8e 58 {
bfictorie 0:8cdad1c73e8e 59 return ts->isBefore(this);
bfictorie 0:8cdad1c73e8e 60 }
bfictorie 0:8cdad1c73e8e 61
bfictorie 0:8cdad1c73e8e 62 Time::Time() {
bfictorie 0:8cdad1c73e8e 63 if (NULL==Time::_timeZoneEntries) {
bfictorie 0:8cdad1c73e8e 64 _timeZoneEntries=new list<TimeZoneEntry*>();
bfictorie 0:8cdad1c73e8e 65 readTimeZones();
bfictorie 0:8cdad1c73e8e 66 }
bfictorie 0:8cdad1c73e8e 67 }
bfictorie 0:8cdad1c73e8e 68
bfictorie 0:8cdad1c73e8e 69 void Time::readTimeZones() {
bfictorie 0:8cdad1c73e8e 70 time_t rawtime;
bfictorie 0:8cdad1c73e8e 71 time ( &rawtime );
bfictorie 0:8cdad1c73e8e 72 TimeStamp ts(rawtime);
bfictorie 0:8cdad1c73e8e 73
bfictorie 0:8cdad1c73e8e 74 int currentYear=ts.getYear();
bfictorie 0:8cdad1c73e8e 75
bfictorie 0:8cdad1c73e8e 76 FILE *fp = fopen("/local/Edmonton.csv", "r");
bfictorie 0:8cdad1c73e8e 77
bfictorie 0:8cdad1c73e8e 78 if (fp==NULL) {
bfictorie 0:8cdad1c73e8e 79 printf("error while reading timezone file\n");
bfictorie 0:8cdad1c73e8e 80 return;
bfictorie 0:8cdad1c73e8e 81 }
bfictorie 0:8cdad1c73e8e 82
bfictorie 0:8cdad1c73e8e 83
bfictorie 0:8cdad1c73e8e 84 char tmp[128]; // enough for a single line
bfictorie 0:8cdad1c73e8e 85 while (fgets(tmp,sizeof(tmp),fp)!=0) {
bfictorie 0:8cdad1c73e8e 86 int fyear, fmon, fday, fhour, fmin, fsec;
bfictorie 0:8cdad1c73e8e 87 int tyear, tmon, tday, thour, tmin, tsec;
bfictorie 0:8cdad1c73e8e 88 int offset;
bfictorie 0:8cdad1c73e8e 89 int r=sscanf(tmp,"%4d-%2d-%2dT%2d:%2d:%2dZ,%4d-%2d-%2dT%2d:%2d:%2dZ,%d",
bfictorie 0:8cdad1c73e8e 90 &fyear, &fmon, &fday, &fhour, &fmin, &fsec,
bfictorie 0:8cdad1c73e8e 91 &tyear, &tmon, &tday, &thour, &tmin, &tsec,
bfictorie 0:8cdad1c73e8e 92 &offset
bfictorie 0:8cdad1c73e8e 93 );
bfictorie 0:8cdad1c73e8e 94 if (13!=r)
bfictorie 0:8cdad1c73e8e 95 continue;
bfictorie 0:8cdad1c73e8e 96 if (fyear<currentYear || tyear>currentYear+5)
bfictorie 0:8cdad1c73e8e 97 continue;
bfictorie 0:8cdad1c73e8e 98
bfictorie 0:8cdad1c73e8e 99 TimeStamp *from=new TimeStamp(fyear, fmon, fday, fhour, fmin, fsec);
bfictorie 0:8cdad1c73e8e 100 TimeStamp *to=new TimeStamp(tyear, tmon, tday, thour, tmin, tsec);
bfictorie 0:8cdad1c73e8e 101 TimeZoneEntry *tze=new TimeZoneEntry();
bfictorie 0:8cdad1c73e8e 102 tze->_from=from;
bfictorie 0:8cdad1c73e8e 103 tze->_to=to;
bfictorie 0:8cdad1c73e8e 104 tze->_offset=offset;
bfictorie 0:8cdad1c73e8e 105 _timeZoneEntries->push_back(tze);
bfictorie 0:8cdad1c73e8e 106 }
bfictorie 0:8cdad1c73e8e 107
bfictorie 0:8cdad1c73e8e 108 fclose(fp);
bfictorie 0:8cdad1c73e8e 109 }
bfictorie 0:8cdad1c73e8e 110
bfictorie 0:8cdad1c73e8e 111 Time::~Time() {
bfictorie 0:8cdad1c73e8e 112 }
bfictorie 0:8cdad1c73e8e 113
bfictorie 0:8cdad1c73e8e 114 TimeStamp* Time::getTime() {
bfictorie 0:8cdad1c73e8e 115 time_t rawtime;
bfictorie 0:8cdad1c73e8e 116 time ( &rawtime );
bfictorie 0:8cdad1c73e8e 117 TimeStamp *ts=new TimeStamp(rawtime);
bfictorie 0:8cdad1c73e8e 118
bfictorie 0:8cdad1c73e8e 119 for (list<TimeZoneEntry*>::iterator it = _timeZoneEntries->begin(); it != _timeZoneEntries->end(); it++) {
bfictorie 0:8cdad1c73e8e 120 TimeZoneEntry* tze=*it;
bfictorie 0:8cdad1c73e8e 121 if (tze->_from->isBefore(ts) && tze->_to->isAfter(ts))
bfictorie 0:8cdad1c73e8e 122 {
bfictorie 0:8cdad1c73e8e 123 rawtime+=tze->_offset;
bfictorie 0:8cdad1c73e8e 124 ts->updateTime(rawtime);
bfictorie 0:8cdad1c73e8e 125 }
bfictorie 0:8cdad1c73e8e 126 }
bfictorie 0:8cdad1c73e8e 127
bfictorie 0:8cdad1c73e8e 128 return ts;
bfictorie 0:8cdad1c73e8e 129 }